Javarevisited

Lyhyesti sanottuna, vaikka Maven ja ANT ovatkin build-työkaluja, tärkein ero on se, että maven tarjoaa myös riippuvuuksien hallinnan, vakioidun projektin asettelun ja projektinhallinnan. Mavenin, ANT:n ja Jenkinsin erosta, jälkimmäinen on jatkuvan integroinnin työkalu, joka on paljon enemmän kuin build-työkalu. Voit perustaa CI-ympäristön Jenkinsin tai Hudsonin avulla ja automaattisesti rakentaa, testata ja ottaa käyttöön Java-projektisi. Viimeisenä tärkein ero Jenkinsin ja Hudsonin välillä, molemmat ovat peräisin samasta lähdekoodista, mutta toinen on suljettu lähdekoodi, kun taas toinen on avoin lähdekoodi. Voit lukea yksityiskohdat tästä artikkelista.
Aloitetaan nyt pitkä tarina, mikä on ero Mavenin ja ANT:n välillä tai ero Mavenin ja Jenkinsin välillä tai Maven vs. Hudson ovat joitakin usein keskusteltuja kysymyksiä Java-kehittäjien keskuudessa. No kaikki neljä esim. ANT, Maven, Jenkins ja Hudson ovat työkaluja, jotka auttavat Java-kehittäjiä rakentamisessa, yksikkötestauksessa, jatkuvassa integroinnissa (CI) ja projektinhallinnassa.
Tässä Java-artikkelissa tutustumme kuhunkin Maveniin, ANT:iin, Jenkinsiin ja Hudsoniin saadaksemme peruskäsityksen siitä, mitä ne ovat, mitä hyötyjä niistä on ja miten niitä käytetään Java JEE -projekteissa. Jotta saisit perusajatuksen, ANT on tunnettu rakennustyökalu, luultavasti vanhin kaikista. Rakennustyökalua käytetään luomaan JAR-tiedoston tai WAR-tiedoston kaltaisia tuotoksia Java-lähteestä ja resursseista käyttöönottoa varten.
Maven tuli ANT:n jälkeen, ja se tarjoaa paljon muutakin kuin rakennustyökalun. Tärkein ero ANT:n ja Mavenin välillä on se, että ANT:ssä täytyy määritellä kaikki eli lähdekansio, rakennushakemisto, kohdehakemisto jne. kun taas Maven ottaa käyttöön periaatteen Convention over configuration.
Tämä tarkoittaa, että Mavenilla on ennalta määritetty projektirakenne eli vakiohakemisto lähdekooditiedostoille, testitiedostoille ja resursseille. Toisaalta Jenkins ja Hudson ovat Continues Integration -työkaluja, joiden avulla voit automatisoida rakentamis- ja käyttöönottoprosessin.
Käyttämällä Jenkinsiä tai Hudsonia voit käynnistää rakentamisen aina, kun kehittäjä lähettää koodia, nähdäksesi, kääntyykö projekti hienosti, ajaa yksikkötestejä, luoda rakentamisen tai jopa ottaa käyttöön QA- tai tuotantoympäristössä.
Jenkinsin tai Hudsonin avulla voit luoda päivittäisen rakentamisprosessin, yöllisen rakentamisprosessin tai viikottaisen rakentamisprosessin. Seuraavassa osiossa ymmärrämme Mavenin, ANT:n, Jenkinsin ja Hudsonin tarkemmin ja ymmärrämme niiden välisen eron.
Btw, jos olet vasta aloittamassa Mavenin käyttöä, suosittelen sinua käymään ensin läpi kattavan Maven-kurssin, kuten Apache Maven: Beginner to Guru, oppiaksesi joitakin perusteita. Se ei ainoastaan auta sinua rakentamaan ja ottamaan käyttöön Java- ja Spring Boot -projektejasi Mavenin avulla, vaan myös oppimaan syvällisesti itse Mavenia.

Maven vs. ANT

Aina siitä lähtien, kun Maven julkaistiin, monet Java-ohjelmoijat vertailevat Mavenia ja ANT:iä toisiinsa, mikä on melko luonnollista. Jopa minulta on kestänyt jonkin aikaa ottaa Maven käyttöön, koska olin hyvin tottunut ANT:n rakentamisprosessiin. Lopulta tajusin, että Maven tarjoaa enemmän mukavuutta rakennustyökaluna kuin ANT ja myös pakottaa yhteisen tavan rakentaa Java-sovelluksia useiden projektien, kehittäjien ja organisaatioiden kesken.
Ennen Maveniin siirtymistä olin työskennellyt hyvin monimutkaisten ANT-skriptien kanssa, ja itse asiassa jokaisessa projektissa, jossa työskentelen, on erilainen rakennerakenne kuin muilla.
Julkaisun tekemiseen on käytettävä huomattavan paljon aikaa koko rakentamisprosessin ymmärtämiseen, esim. mistä kirjastot ovat tulossa, tulevatko ne JAR-arkkitehtuureina, vai rakennetaanko ne projektissa rakentamisaikana jne. Maven ratkaisee monet näistä ongelmista ottamalla käyttöön standardikonvention ja paremman riippuvuuksien hallinnan.
Jos meidän on verrattava Mavenia ja ANT:iä, seuraavassa on listani Mavenin ja ANT:n eroista :

1) Yksi merkittävä ero Mavenin ja ANT:n välillä on se, että Maven vaatii vähemmän konfigurointeja kuin ANT, koska se toimii periaatteella konvention sijaan konfiguroinnin sijaan, ja se olettaa, että kohtuulliset oletusarvot e.esim. java-lähdetiedosto ${basedir}/src/main/java, resurssit ${basedir}/src/main/resources, JUnit-testitapaukset ${basedir}/src/test/java jne.
Se luo myös Java-luokkatiedostot ${basedir}/target/classes-hakemistoon ja JAR-tiedoston ${basedir}/target-hakemistoon. Toisaalta ANT vaatii, että kaikki nämä hakemistot toimitetaan konfiguraationa, yleensä ANT:n rakennustiedostossa esim. build.xml.
2) Toinen merkittävä ero Mavenin ja ANT:n välillä on riippuvuuksien hallinta. Maven otti käyttöön arkiston käsitteen, joka on keskeinen paikka kaikkien kirjastojen, JAR:ien jne. tallentamiselle. Maven mahdollistaa sekä keskitetyn maven-arkiston että paikallisen arkiston käytön ja riippuvuuksien automaattisen lataamisen rakentamisprosessin aikana.
Vaikka ANT-pohjaiset projektit käyttävät yleensä ${lib}-hakemistoa riippuvuuksien tallentamiseen. Riippuvuuden muuttaminen ja päivittäminen on paljon helpompaa mavenissa kuin ANT:ssä, koska riippuvuutta ei tarvitse ladata manuaalisesti. Organisaation laajuinen keskitetty arkisto auttaa myös poistamaan redundanssia eri projekteissa.
3) Kolmas ja tärkein ero Mavenin ja ANT:n välillä on se, että Maven tarjoaa yhtenäisen ja yhteisen käyttöliittymän Java-projektien rakentamiseen. Sinun tarvitsee vain ladata projekti ja suorittaa mvn install sen rakentamiseksi. Myös tuntemalla mavenin konventiot ja katsomalla pom.xml:ää voi helposti ymmärtää, missä lähdetiedostot ovat ja mitkä ovat projektin riippuvuudet.

4) Toinen tekninen ero ANT:n ja Mavenin välillä on se, että ANT-tehtävällä ei ole mitään elinkaarta, vaan sinun on määriteltävä kohteet ja niiden riippuvuudet. Kun taas Mavenilla on elinkaari, joka käynnistyy, kun suoritat komentoja kuten mvn install. Maven suorittaa sarjan vaiheita tämän komennon tuloksena tuottaakseen artefakteja esim. JAR-tiedoston, joka on elinkaaren loppu.
5) Maven myös pakottaa vakiomuotoisen nimeämiskäytännön artefakteille, jotka määritellään käyttämällä groupId, artifactId ja version. Lisäksi yksi ero ANT:n ja Mavenin välillä on vielä se, että Maven on muutakin kuin pelkkä build-työkalu, se toimii projektinhallintatyökaluna ja voi luoda raportteja jne. Tosin en ole vielä käyttänyt tätä ominaisuutta.

Maven vs. Jenkins ja Hudson

Jenkins ja Hudson ovat jatkuvan integroinnin työkaluja, jotka tunnetaan yleisesti CI-kehyksinä. Niiden avulla Java-projekti voi automatisoida rakentamis- ja käyttöönottoprosessin. Käyttämällä CI-työkaluja, kuten Hudsonia tai Jenkinsiä, voit luoda tunti- tai päiväkohtaiset buildit automaattisesti, voit myös ajaa yksikkötestit automaattisesti ja voit ottaa buildin käyttöön QA- tai tuotantoympäristössä.
Tästä on apua, jos työskentelet suuressa projektissa ja kehitystiimi on hajautettu useisiin eri paikkoihin. CI-työkalut voivat käynnistää buildin aina, kun kehittäjä lähettää koodia, ja tarkistaa, kääntyykö projekti vai ei.
Jenkins ja Hudson ovat muuten samasta lähdepuusta. Hudson oli alkuperäinen projekti, joka oli avoimen lähdekoodin ja Sunin tukema.
Kun Oracle osti Sunin, se otti haltuunsa Hudsonin nimen ja Hudsonin logistisen alustan. Monet avoimen lähdekoodin avustajat eivät olleet tyytyväisiä tähän, minkä tuloksena syntyi Jenkins, joka on melko pitkälti yhteisölähtöinen.
Jos meidän on verrattava Mavenia ja Jenkinsiä tai Hudsonia, seuraava olisi listani Mavenin ja Hudsonin tai Jenkinsin välisistä eroista :

1) Mavenin ja Jenkinsin tai Hudsonin pääasiallinen ero Mavenin ja Jenkinsin tai Hudsonin välillä on se, että Mavenin rakentamistyökalu, joka osaa rakentaa projektin, ja että Jenkinsin tai Hudsonin avulla saadaan aikaan laukaisu, jonka avulla voidaan rakentaa. Voit hallita, milloin rakentaminen käynnistetään automaattisesti Jenkinsin tai Hudsonin tai minkä tahansa CI-työkalun avulla.
2) Jenkins voi käyttää Mavenia rakennustyökaluna. Lisäksi Jenkins tai Hudson voi tehdä paljon muutakin kuin vain rakentaa sovelluksia, ne voivat ajaa kaikki yksikkötestit, ottaa toimitukset käyttöön määritetyille palvelimille jne. Pohjimmiltaan ero on siinä, että Maven on build-työkalu, kun taas Jenkins tai Hudson on Continues Integration -työkalu.
Tässä kaikki Mavenin ja ANT:n, Jenkinsin tai Hudsonin jne. eroista. Maven on aika lailla standardi Java-projektien rakentamisessa nykyään ja sitä voi muokata ANT-pohjaiseen legacy-ympäristöön sopivaksi. Joillakin organisaatioilla on myös CI-työkaluja, kuten Jenkins, joita voidaan käyttää yhdessä Mavenin kanssa automatisoidun rakentamis-, testaus- ja käyttöönottoprosessin kanssa.
Lisäopintoja
Maven Fundamentals by Bryan Hansen
Maven Crash Course
Java Maven :101 Lopeta Java-ohjelmien rakentaminen vaikealla tavalla!