Javarevisited
Röviden, bár a Maven és az ANT build eszközök, a fő különbség az, hogy a maven függőségkezelést, szabványos projekt elrendezést és projektkezelést is biztosít. A Maven, ANT és Jenkins közötti különbségről, utóbbi egy folyamatos integrációs eszköz, ami sokkal több, mint egy build eszköz. A Jenkins vagy a Hudson segítségével beállíthatja CI környezetét, és automatikusan építheti, tesztelheti és telepítheti Java projektjét. Most utoljára a fő különbség a Jenkins és a Hudson között, mindkettő ugyanabból a forráskódból származik, de az egyik zárt forráskódú, míg a másik nyílt forráskódú. A részleteket ebben a cikkben olvashatja el.
Most kezdjük a hosszú történetet, mi a különbség a Maven és az ANT között, vagy a különbség a Maven és a Jenkins között, vagy a Maven vs Hudson néhány gyakran megvitatott kérdés a Java fejlesztők körében, amikor fejlesztők. Nos mind a négy pl. ANT, Maven, Jenkins és Hudson olyan eszközök, amelyek segítik a Java fejlesztőket a build, unit tesztelés, folyamatos integráció (CI) és a projektmenedzsment területén.
Ebben a Java cikkben a Maven, ANT, Jenkins és Hudson mindegyikét megvizsgáljuk, hogy alapvető képet kapjunk arról, hogy mik ezek, milyen előnyöket kínálnak, és hogyan használják őket a Java JEE projektekben. Csak hogy adjunk egy alapképet, az ANT egy jól ismert build eszköz, valószínűleg a legrégebbi az összes közül. A build eszköz arra szolgál, hogy a Java forrásból és erőforrásokból JAR fájlhoz vagy WAR fájlhoz hasonló eredményeket hozzon létre a telepítéshez.
A Maven az ANT után jött, és sokkal többet nyújt, mint egy build eszköz. A fő különbség az ANT és a Maven között az, hogy az ANT-ben mindent meg kell határozni, azaz a forráskönyvtárat, a build könyvtárat, a célkönyvtárat stb. míg a Maven a Convention over configuration elvet alkalmazza.
Ez azt jelenti, hogy a Maven rendelkezik egy előre meghatározott projektstruktúrával, azaz szabványos könyvtárral a forrásfájlok, tesztfájlok és erőforrások számára. Másrészt a Jenkins és a Hudson a Continues Integration eszköz, amely lehetőséget ad a build és deployment folyamat automatizálására.
A Jenkins vagy a Hudson használatával elindíthatja a buildet, amikor a fejlesztő kódot commitol, hogy lássa, jól fordít-e a projekt, futtathatja a unit teszteket, létrehozhat egy buildet, vagy akár telepítheti QA vagy termelési környezetbe.
Hasonlóképpen, a Jenkins vagy a Hudson segítségével létrehozhat egy napi build, éjszakai build vagy heti build folyamatot. A következő részben a Maven, az ANT, a Jenkins és a Hudson részletesebb megértése és a köztük lévő különbség megértése következik.
Mellesleg, ha most kezded a Maven használatát, azt javaslom, hogy először egy átfogó Maven tanfolyamon, például az Apache Maven: Beginner to Guru tanfolyamon menj végig, hogy megtanulj néhány alapot. Ez nem csak abban fog segíteni, hogy a Java és Spring Boot projekteket a Maven segítségével építse és telepítse, hanem magát a Maven-t is alaposan meg fogja tanulni.
Maven vs ANT
Mióta a Maven megjelent, sok Java programozó összehasonlítja a Maven-t és az ANT-t, ami elég természetes. Még nekem is időbe telt, mire elfogadtam a Maven-t, mert nagyon hozzászoktam az ANT build folyamatához. Végül rájöttem, hogy a Maven több kényelmet kínál, mint az ANT, és a Java-alkalmazások építésének közös módját kényszeríti ki több projekt, fejlesztő és szervezet között.
A Mavenre való áttérés előtt nagyon összetett ANT-szkriptekkel dolgoztam, sőt, minden projekt, amelyen dolgozom, más építési struktúrával rendelkezik, mint a többi.
A kiadás elkészítéséhez jelentős időt kell tölteni az egész építési folyamat megértésével, pl. honnan érkeznek a könyvtárak, JAR-ként érkeznek, vagy a projekt építi őket az építési idő alatt, stb. A Maven sok ilyen problémát megold a szabványos konvenció és a jobb függőségkezelés bevezetésével.
Ha össze kell hasonlítanunk a Maven-t és az ANT-et, a következőkben felsorolom a Maven és az ANT közötti különbségeket :
1) Az egyik fő különbség a Maven és az ANT között az, hogy a Maven kevesebb konfigurációt igényel, mint az ANT, mert a konvenció a konfiguráció helyett elve alapján működik, és elfogadható alapértelmezett e.pl. java forrásfájl a ${basedir}/src/main/java, erőforrások a ${basedir}/src/main/resources, JUnit tesztesetek a ${basedir}/src/test/java stb.
A Java osztályfájlokat a ${basedir}/target/classes és JAR fájlt a ${basedir}/target könyvtárban hozza létre. Ezzel szemben az ANT mindezeket a könyvtárakat konfigurációként kell megadnia, általában az ANT build fájlban, pl. build.xml.
2) Egy másik jelentős különbség a Maven és az ANT között a függőségkezelés. A Maven bevezette a repository fogalmát, amely egy központi hely az összes könyvtár, JAR stb. tárolására. A Maven lehetővé teszi egy központi maven tároló, valamint egy helyi tároló használatát és a függőségek automatikus letöltését a build folyamat során.
Míg az ANT alapú projektek általában a ${lib} könyvtárat használják a függőségek tárolására. A függőségek módosítása és frissítése sokkal egyszerűbb a mavenben, mint az ANT-ben, mivel nem kell manuálisan letölteni a függőségeket. Az egész szervezetre kiterjedő központi adattár segítségével a különböző projektek közötti redundancia is megszűnik.
3) A harmadik és legfontosabb különbség a Maven és az ANT között az, hogy a Maven konzisztens és közös felületet kínál a Java-projektek építéséhez. Mindössze annyit kell tennie, hogy letölti a projektet, és az mvn install futtatásával elkészíti azt. Emellett a maven konvenciók ismeretében és a pom.xml megtekintésével könnyen megérthetjük, hogy hol vannak a forrásfájlok és mik a projekt függőségei.
4) Egy másik technikai különbség az ANT és a Maven között, hogy az ANT feladatnak nincs életciklusa, meg kell határozni a célokat és azok függőségeit. Míg a Maven rendelkezik életciklussal, amely akkor hívódik elő, amikor olyan parancsokat futtatunk, mint az mvn install. A Maven egy sor lépést hajt végre ennek a parancsnak az eredményeképpen, hogy létrehozza az artefaktumokat, pl. a JAR fájlt, ami az életciklus végét jelenti.
5) A Maven egy szabványos elnevezési konvenciót is érvényesít a groupId, artifactId és version használatával definiált artefaktumok számára. Továbbá, még egy különbség az ANT és a Maven között, hogy a Maven több, mint egy build eszköz, projektmenedzsment eszközként működik, és képes jelentéseket stb. generálni, Bár ezt a funkciót még nem használtam.
Maven vs Jenkins és Hudson
A Jenkins és a Hudson folyamatos integrációs eszköz, általánosan ismert CI keretrendszerek. Lehetővé teszik a Java projekt számára a build és deployment folyamat automatizálását. Az olyan CI-eszközök, mint a Hudson vagy a Jenkins használatával automatikusan létrehozhat óránkénti vagy napi buildeket, automatikusan futtathatja a unit teszteket, és telepítheti a buildet a QA vagy a termelési környezetbe.
Ez segít, ha egy nagy projektben dolgozik, és a fejlesztőcsapat több helyen van szétszórva. A CI-eszközök képesek elindítani a buildet, amikor a fejlesztő kódot commitol, és ellenőrizni, hogy a projekt kompilálódik-e vagy sem.
Apropó, a Jenkins és a Hudson ugyanabból a forrásfából származik. A Hudson egy eredeti projekt volt, amely nyílt forráskódú volt, és a Sun támogatta.
Amikor az Oracle megvásárolta a Sun-t, átvette az irányítást a Hudson név és a Hudson logisztikai platformja felett. Sok nyílt forráskódú közreműködőnek nem tetszett ez, ami a Jenkins-t eredményezte, ami eléggé közösségvezérelt.
Ha össze kell hasonlítanunk a Maven-t és a Jenkins-t vagy a Hudsont, a következő lenne a Maven és a Hudson vagy a Jenkins közötti különbségek listája :
1) A fő különbség a Maven és a Jenkins vagy a Hudson között az, hogy a Maven egy build eszköz, ami tudja, hogyan kell buildelni egy projektet, a Jenkins vagy a Hudson pedig egy trigger-t ad a buildhez. A Jenkins vagy a Hudson vagy bármely CI eszközzel szabályozhatja, hogy mikor indítsa el automatikusan a buildet.
2) A Jenkins képes a Maven-t build eszközként használni. Továbbá a Jenkins vagy a Hudson sokkal többet tud az alkalmazások építésénél, képes lefuttatni az összes egységtesztet, telepíteni a szállítmányokat a konfigurált szerverekre stb. Lényegében a különbség az, hogy a Maven egy build eszköz, míg a Jenkins vagy a Hudson egy Continues Integration eszköz.
Ez minden a Maven és az ANT, a Jenkins vagy a Hudson stb. közötti különbségről. A Maven manapság nagyjából a Java projektek építésének szabványa, és az ANT alapú örökölt környezetedhez igazíthatod. Néhány szervezetnek vannak CI eszközei is, mint például a Jenkins, amelyek a Maven mellett használhatók az automatizált építési, tesztelési és telepítési folyamathoz.
Továbbtanulás
Maven Fundamentals by Bryan Hansen
Maven Crash Course
Java Maven :101 Stop Building Java Programs the Hard Way!