A megfelelő összeállítási eszköz kiválasztása: Ant vs Maven vs Gradle
A szoftverfejlesztés során a fejlesztőknek ugyanazt a kódot kell újra és újra felépíteniük. Gyakran próbálnak bash vagy más szkript nyelveket használni a feladat automatizálásához. Vannak azonban olyan buildeszközök, amelyek alkalmasabbak a build automatizálására. Az uralkodó építési eszközök a következők:
- Apache Hangya Ivyval
- Maven
- Gradle
Vizsgáljuk meg az eszközöket, hogy többet tudjunk meg.
Apache Ant Ivyval
Az Apache Ant egy Java-alapú parancssori eszköz, amely XML fájlokat használ az építési parancsfájlok meghatározásához. Főleg Java építésekhez használják, de C / C ++ fejlesztéshez is. A beépített feladatok lehetővé teszik a szoftveralkalmazások összeállítását, összeállítását, tesztelését és futtatását. A felhasználók saját AntLib-eket is létrehozhatnak az Ant funkcionalitásának javítása érdekében. Az Apache Ivy egy függőségkezelő eszköz, amely könnyen integrálható az Ant-val, hogy erősebb ökoszisztémát nyújtson. A Hangya fejlesztése 2000-ben kezdődött.
Előnyök
- Jobb ellenőrzés a teljes építési folyamat felett
- Elég rugalmas ahhoz, hogy bármilyen munkafolyamat mellett dolgozzon
Hátrányok
- Az XML alapú build fájlok nagymértékben és fenntarthatatlanná válhatnak
- Sok időre és erőforrásra van szükség a build szkriptek fenntartásához
- Az IDE integrációját nehéz elérni
Hangya Ivy példával
A legújabb Ant-t innen telepítheti. Töltse le a zip-t, bontsa ki és helyezze a bin mappát az útvonalába. A következő paranccsal ellenőrizheti, hogy az Ant megfelelően van-e telepítve:
$ hangya -verzióApache Ant (TM) 1. verzió.10.1 összeállítva 2017. február 2-án
Miután telepítette az Ant programot, letöltheti a legújabb Ivy jar-t, és beteheti azt a lib mappába az Ant könyvtárban.
Az Ant telepítése után hozzon létre mappákat helloworld és helloworld / src. Az src mappába tegye a helloworld-t.java fájl a következő kóddal:
/ ***************************Kiírja a "Hello World!"
**************************** /
nyilvános osztály helloworld
public static void main (String [] érvel)
Rendszer.ki.println ("Hello Világ!");
Most a helloworld mappában hozzon létre egy buildet.xml fájl a következő kóddal:
És ugyanabban a helloworld mappában hozza létre a borostyánt.xml fájl a következő kóddal:
A könyvtárszerkezetnek így kell kinéznie:
Helló Világ| - épít.xml
| - borostyán.xml
'- src
'-- Helló Világ.Jáva
Most a következő paranccsal futtathatja az építést:
$ hangya tégelyA sikeres összeállításnak ilyen kimenetet kell nyújtania:
$ hangya tégelyBuildfile: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml
elhatározás:
[ivy: retrieve] :: Apache Ivy 2.4.0 - 20141213170938 :: http: // ant.apache.org / borostyán / ::
[ivy: retrieve] :: betöltési beállítások :: url = jar: file: / Users / zak / BuildTools / ANT / apache
-hangya-1.10.1 / lib / borostyán-2.4.0.befőttes üveg!/ org / apache / borostyán / core / settings / ivysettings.xml
[ivy: retrieve] :: függőségek megoldása :: org.apache # helloworld; [e-mail védett]
MacBook Air.helyi
[ivy: retrieve] confs: [alapértelmezett]
[ivy: retrieve] talált junit # junit; 4.12 nyilvánosan
[ivy: retrieve] megtalált org.hamcrest # hamcrest-core; 1.3 nyilvánosan
[ivy: retrieve] :: megoldási jelentés :: resolut 397ms :: műtárgyak dl 15ms
---------------------------------------------------------------------
| | modulok || leletek |
| konf | szám | keresés | elavult | kilakoltatott || szám | elavult |
---------------------------------------------------------------------
| alapértelmezett | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[ivy: retrieve] :: visszakeresés :: org.apache # helloworld
[ivy: retrieve] confs: [alapértelmezett]
[ivy: retrieve] 0 műtárgy másolva, 4 már letöltve (0kB / 39ms)
összeállítás:
[mkdir] Létrehozta a dir: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build /
osztályok
[javac] / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml: 22: figyelmeztetés:
Az 'includeeantruntime' nem volt beállítva, alapértelmezés szerint az épít.sysclasspath = utolsó; hamisra állítva
megismételhető összeállításokhoz
[javac] 1 forrásfájl fordítása a / Users / zak / _work / LearnBuildScripts / LearnANT / könyvtárba
helloworld / build / osztályok
befőttes üveg:
[mkdir] Létrehozva: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin
[jar] Építési üveg: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin /
Helló Világ.befőttes üveg
SIKERES ÉPÍTÉS
Teljes idő: 6 másodperc
A jar fájlt így próbálhatja ki:
$ java -cp build / bin / helloworld.jar helloworldHelló Világ!
Meghatároztuk a jar / file fájlt a build / bin mappába. A mappák a létrehozás során jönnek létre. A hangya jar parancs felhívja a jar célpontot a buildben.xml.
Maven
A Maven-t azért fejlesztették ki, hogy megoldja az Ant-alapú szkriptek problémáit. Megtartotta az XML fájlokat, de más megközelítést alkalmazott a szervezéssel kapcsolatban. A Hangyában a fejlesztőknek meg kell hozniuk az összes feladatot. Maven csökkenti a feladat létrehozását azáltal, hogy szigorúbb szabványokat alkalmaz a kód rendezéséhez. Ennek eredményeként könnyebb elkezdeni a szokásos projekteket.
Függőségi letöltéseket is bevezetett, amelyek megkönnyítették a fejlesztést. Az Ivy Ant-ban való bevezetése előtt a felhasználóknak helyben kellett kezelniük a függőségeket. Maven először a függőségkezelési filozófiát alkalmazta.
A szigorú Mavens szabványok azonban megnehezítik az egyedi összeállítású szkriptek írását. Az eszközzel könnyen lehet dolgozni, amennyiben a projekt megfelel a szigorú előírásoknak.
Előnyök
- Automatikus függőségi letöltések
- Minden függőség automatikusan rögzítésre kerül a forrás vezérlésében a Maven szkriptek részeként
- Szabványosítja és leegyszerűsíti az összeállítási folyamatot
- Könnyen integrálható IDE-kkel és CI / CD rendszerekkel
Hátrányok
- Nem rugalmas az egyéni munkafolyamatok létrehozásában
- A meredek tanulási görbe és a folyamatot nehéz kezdőknek megérteni
- Időigényes az építési problémák és az új könyvtár-integrációk megoldása
- Nem jó ugyanazon függőség több változatával
Maven példa
A legfrissebb Maven innen tölthető le. A telepítést így ellenőrizheti:
$ mvn --verzióApache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00: 58: 13-07: 00)
Maven home: / Users / zak / BuildTools / Maven / apache-maven-3.5.2
Java verzió: 1.8.0_74, szállító: Oracle Corporation
Java home: / Library / Java / JavaVirtualMachines / jdk1.8.0_74.jdk / Tartalom / Főoldal / jre
Alapértelmezett területi beállítás: en_US, platformkódolás: UTF-8
Operációs rendszer neve: "mac os x", verzió: "10.11.6 ", arch:" x86_64 ", család:" mac "
Hozzon létre egy helloworld mappát, és hozzon létre egy projektet a következő paranccsal:
$ mvn archetípus: generál -DgroupId = com.Cégnév.helloworld -DartifactId = helloworld-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode = hamis
Létre kell hoznia a mappaszerkezetet, és létre kell hoznia az így kinéző kimenetet:
[INFO] Projektek keresése ..[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Maven Stub Project építése (POM nélkül) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin: 3.0.0: generál (alapértelmezett-cli)> generál-források
@ önálló-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ önálló-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin: 3.0.0: generál (alapértelmezett-cli) @ önálló-pom ---
[INFO] Projekt generálása kötegelt módban
[INFO] ----------------------------------------------------------------------------
[INFO] A következő paraméterek használata a régi (1.x) Archetípus:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Paraméter: basedir, Érték: / Users / zak / _work / LearnBuildScripts / LearnMaven
[INFO] Paraméter: csomag, Érték: com.Cégnév.Helló Világ
[INFO] Paraméter: groupId, Érték: com.Cégnév.Helló Világ
[INFO] Paraméter: artifactId, Érték: helloworld
[INFO] Paraméter: packageName, Érték: com.Cégnév.Helló Világ
[INFO] Paraméter: verzió, Érték: 1.0-SNAPSHOT
[INFO] projekt a Régi (1.x) Archetípus a következőben: / Users / zak / _work /
LearnBuildScripts / LearnMaven / helloworld
[INFO] ------------------------------------------------------------------------
[INFO] SIKER ÉPÍTÉSE
[INFO] ------------------------------------------------------------------------
[INFO] Teljes idő: 8.602 s
[INFO] Befejezés dátuma: 2018-01-27T00: 05: 37-08: 00
[INFO] Végső memória: 15M / 152M
[INFO] ------------------------------------------------------------------------
A mappaszerkezetnek így kell kinéznie:
Helló Világ| - pom.xml
'- src
| - fő
| '- java
| '- com
| '-- Cégnév
| '-- Helló Világ
| '- App.Jáva
'- teszt
'- java
'- com
'-- Cégnév
'-- Helló Világ
'- AppTest.Jáva
A pom.Az xml tartalmazza a build konfigurációkat. Bent a pom.xml a kód így néz ki:
_0.xsd ">
A jar fájlt a következő paranccsal állíthatja elő:
$ mvn csomag[INFO] Projektek keresése ..
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Helloworld építése 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin: 2.6: erőforrások (alapértelmezett erőforrások) @ helloworld ---
[FIGYELEM] Platformkódolás (valójában UTF-8) használata szűrt erőforrások másolásához, azaz.e.
a build platformfüggő!
[INFO] kihagyja a nem létező resourceDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / main / resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: fordítás (alapértelmezett fordítás) @ helloworld ---
[INFO] Változások észlelve - a modul újrafordítása!
[FIGYELEM] A fájlkódolás nincs beállítva, az UTF-8 platformkódolást használva, azaz.e. épít
platformfüggő!
[INFO] 1 forrásfájl fordítása a / Users / zak / _work / LearnBuildScripts / LearnMaven / könyvtárba
helloworld / target / osztályok
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (alapértelmezett-testResources) @
Helló Világ ---
[FIGYELEM] Platformkódolás (valójában UTF-8) használata a szűrt erőforrások másolásához, azaz.e.
a build platformfüggő!
[INFO] kihagyja a nem létező resourceDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / test / resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (alapértelmezett-testCompile) @ helloworld ---
[INFO] Változások észlelve - a modul újrafordítása!
[FIGYELEM] A fájlkódolás nincs beállítva, az UTF-8 platformkódolást használva, azaz.e. épít
platformfüggő!
[INFO] 1 forrásfájl fordítása a / Users / zak / _work / LearnBuildScripts / LearnMaven könyvtárba
/ helloworld / target / teszt-osztályok
[INFO]
[INFO] --- maven-surefire-plugin: 2.12.4: teszt (alapértelmezett teszt) @ helloworld ---
[INFO] Surefire jelentés könyvtár: / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target /
biztos-jelentések
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Futó com.Cégnév.Helló Világ.AppTest
Futtatott tesztek: 1, hibák: 0, hibák: 0, kihagyott: 0, eltelt idő: 0.014 mp
Eredmények :
Futtatott tesztek: 1, hibák: 0, hibák: 0, kihagyott: 0
[INFO]
[INFO] --- maven-jar-plugin: 2.4: jar (alapértelmezett-jar) @ helloworld ---
[INFO] Építőedény: / Users / zak / _work / LearnBuildScripts / LearnMaven / helloworld / target /
helloworld-1.0-SNAPSHOT.befőttes üveg
[INFO] ------------------------------------------------------------------------
[INFO] SIKER ÉPÍTÉSE
[INFO] ------------------------------------------------------------------------
[INFO] Teljes idő: 5.624 s
[INFO] Befejezés dátuma: 2018-01-27T00: 11: 10-08: 00
[INFO] Végső memória: 16M / 114M
[INFO] ------------------------------------------------------------------------
A jar fájlt így futtathatja:
$ java -cp target / helloworld-1.0-SNAPSHOT.jar com.Cégnév.Helló Világ.AppHelló Világ!
A jar fájl a célmappába kerül.
Gradle
Gradle ötvözi Ant és Maven erejét. A Gradle első verziója 2012-ben jelent meg. Gyors elfogadása volt. A Google jelenleg az Android operációs rendszerhez használja.
Az XML helyett a Gradle a Groovy nyelvet használja. Ennek eredményeként a Gradle-ben létrehozott szkripteket könnyebb írni és olvasni. Eleinte az Ivy-t használta függőségkezeléshez, de most a saját függőségi motorját használja.
Előnyök
- Biztosítja a szabványosítást, miközben rugalmas marad
- Könnyen olvasható és írható build szkript
- Jobban kezelhető a függőségek több verziója
- Képes kezelni több programozási nyelvet és technológiát
- Aktív közösség segíti az eszköz fejlesztését
- A Gradle DSL (tartományspecifikus nyelv) egyszerű konfigurációs felépítést tesz lehetővé
- A Gradle teljesítménynövelést nyújt fokozatosan, a gyorsítótár összeállítása és a Gradle démon segítségével
Hátrányok
- Az IDE integrációja nem olyan jó, mint Maven
Gradle példa
A Gradle-t innen telepítheti. Miután beállította a Gradle-t az útvonalán, ellenőrizheti:
$ gradle --verzió------------------------------------------------------------
4. fokozat.5
------------------------------------------------------------
Építés ideje: 2018-01-24 17:04:52 UTC
Felülvizsgálat: 77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy: 2.4.12
Hangya: Apache Ant (TM) 1. verzió.9.9 összeállítva 2017. február 2-án
JVM: 1.8.0_74 (Oracle Corporation 25.74-b02)
Operációs rendszer: Mac OS X 10.11.6 x86_64
Ezután hozza létre a következő könyvtárstruktúrát:
Helló Világ| - épít.gradle
'- src
| - fő
'- java
'-- Helló Világ
'-- Helló Világ.Jáva
A fõvilágnak.java feltette a kódot a Hangya példából. És építkezéshez.gradle írja be a következő kódot:
plugin alkalmazása: 'java'verzió = '1.0 '
adattárak
mavenCentral ()
függőségek
testCompile csoport: 'junit', név: 'junit', verzió: '4.12 '
A „gradle task -all” paranccsal megnézheti az összes elérhető parancsot. A Gradle automatikusan felveszi a buildben megadott bővítményeket.gradle fájlt, és megmutatja a beépülő modulok miatt elérhető extra feladatokat.
Az összeállítást a
$ gradle jarSIKERES ÉPÍTÉS 1 másodperc alatt
2 végrehajtható feladat: 2 végrehajtva
Az edényt így futtathatja:
$ java -cp build / libs / helloworld-1.0.jar helloworldHelló Világ!
A jar fájl a build / libs mappába kerül.
Következtetés
A buildeszközök közül az Ant hasznos lehet kisebb projekteknél, míg a Maven jobban biztosítja, hogy minden fejlesztő ugyanazokat a szabályokat kövesse. A Gradle a legújabb eszköz, amely a legnagyobb rugalmasságot biztosítja.
Referenciák:
- http: // hangya.apache.org /
- http: // hangya.apache.org / borostyán /
- https: // maven.apache.org /
- https: // fokozat.org /
- http: // makble.com / gradle-junit-helloworld-example
- https: // példák.javacodegeeks.com / core-java / gradle / gradle-hello-world-tutorial /
- https: // fokozat.org / maven-vs-gradle /
- https: // maven.apache.org / útmutatók / kezdő lépések / öt perc múlva.html
- https: // stackoverflow.com / questions / 20755437 / java-build-tools-ant-vs-maven
- https: // technológiai beszélgetések.com / 2014/06/18 / build-tools /
- https: // www.quora.com / Melyek a Maven-versus-hangyák előnyei és hátrányai, mint a Java fejlesztési eszközei