Výběr správného nástroje pro sestavení: Ant vs Maven vs Gradle
Během vývoje softwaru musí vývojáři znovu a znovu vytvářet stejný kód. Často se k automatizaci úlohy snaží použít bash skripty nebo jiné skriptovací jazyky. K dispozici jsou však nástroje pro sestavení, které jsou vhodnější pro automatizaci sestavení. Převládající nástroje pro sestavení jsou:
- Apache Ant s Ivy
- Maven
- Gradle
Prozkoumejme nástroje, abychom zjistili více.
Apache Ant s Ivy
Apache Ant je nástroj příkazového řádku založený na prostředí Java, který k definování skriptů sestavování používá soubory XML. Používá se převážně pro sestavení Java, ale lze jej použít také pro vývoj v C / C ++. Integrované úlohy poskytují způsoby kompilace, sestavování, testování a spouštění softwarových aplikací. Uživatelé mohou také vytvořit své vlastní „antlibs“, aby vylepšili funkčnost Ant. Apache Ivy je nástroj pro správu závislostí, který se snadno integruje s Ant a poskytuje robustnější ekosystém. Vývoj Ant začal v roce 2000.
Profesionálové
- Lepší kontrola nad celkovým procesem sestavení
- Dostatečně flexibilní pro práci s jakýmkoli pracovním procesem
Nevýhody
- Soubory sestavení založené na XML mohou být velké a neudržitelné
- Ke správě sestavovacích skriptů je zapotřebí spousta času a prostředků
- Integrace IDE je obtížné dosáhnout
Příklad mravence s břečťanem
Zde si můžete nainstalovat nejnovější Ant. Musíte si stáhnout zip, rozbalit a umístit složku bin do cesty. Pomocí následujícího příkazu můžete zjistit, zda je Ant nainstalován správně:
$ ant-verzeApache Ant (TM) verze 1.10.1 sestaveno 2. února 2017
Jakmile máte Ant nainstalován, můžete si stáhnout nejnovější Ivy jar a umístit jej do složky lib v adresáři Ant.
Po instalaci Ant vytvořte složky helloworld a helloworld / src. Do složky src vložte helloworld.java soubor s kódem:
/ ***************************Vytiskne „Hello World!"
**************************** /
veřejná třída helloworld
public static void main (String [] args)
Systém.ven.println ("Hello World!");
Nyní ve složce helloworld vytvořte sestavení.xml soubor s následujícím kódem:
A ve stejné složce helloworld vytvořte břečťan.xml soubor s následujícím kódem:
Struktura adresářů by měla vypadat takto:
Ahoj světe| - sestavení.xml
| - břečťan.xml
'- src
'-- Ahoj světe.Jáva
Nyní můžete sestavení spustit pomocí příkazu:
$ mravenec jarÚspěšné sestavení by mělo poskytovat výstup takto:
$ mravenec jarBuildfile: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml
odhodlání:
[břečťan: načíst] :: Apache Ivy 2.4.0 - 20141213170938 :: http: // ant.apache.org / břečťan / ::
[břečťan: načíst] :: nastavení načítání :: url = jar: soubor: / Users / zak / BuildTools / ANT / apache
-mravenec-1.10.1 / lib / břečťan-2.4.0.sklenice!/ org / apache / ivy / core / settings / ivysettings.xml
[břečťan: načíst] :: řešení závislostí :: org.apache # helloworld; [chráněno e-mailem]
MacBook air.místní
[břečťan: načíst] confs: [výchozí]
[břečťan: načíst] nalezen junit # junit; 4.12 na veřejnosti
[břečťan: načíst] nalezená org.hamcrest # hamcrest-core; 1.3 na veřejnosti
[břečťan: načíst] :: zpráva o řešení :: řešení 397ms :: artefakty dl 15ms
---------------------------------------------------------------------
| | moduly || artefakty |
| conf | číslo | hledat | dwnlded | vystěhovaný || číslo | dwnlded |
---------------------------------------------------------------------
| výchozí | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[břečťan: načíst] :: načítání :: org.apache # helloworld
[břečťan: načíst] confs: [výchozí]
[břečťan: načíst] 0 zkopírovaných artefaktů, 4 již načtené (0 kB / 39 ms)
kompilovat:
[mkdir] Vytvořil adresář: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build /
třídy
[javac] / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml: 22: varování:
Nebylo nastaveno 'includeeantruntime', výchozí nastavení bylo sestavení.sysclasspath = poslední; nastavena na hodnotu false
pro opakovatelné sestavení
[javac] Kompilace 1 zdrojového souboru do / Users / zak / _work / LearnBuildScripts / LearnANT /
helloworld / build / classes
sklenice:
[mkdir] Vytvořil adresář: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin
[jar] Building jar: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin /
Ahoj světe.sklenice
STAVĚJTE ÚSPĚŠNĚ
Celkový čas: 6 sekund
Soubor jar můžete vyzkoušet takto:
$ java -cp build / bin / helloworld.jar helloworldAhoj světe!
Definovali jsme soubor jar, který má být vložen do složky build / bin. Složky se vytvoří během sestavení. Příkaz ant jar volá cíl jar v sestavení.xml.
Maven
Maven byl vyvinut k vyřešení problémů, kterým čelí skriptování na bázi Ant. Zachovala soubory XML, ale zvolila jiný přístup k organizaci. V Antu musí vývojáři vytvořit všechny úkoly. Maven snižuje vytváření úloh implementací silnějších standardů pro organizaci kódu. Ve výsledku je snazší začít se standardními projekty.
Zavedlo také stahování závislostí, což usnadnilo vývoj. Před zavedením Ivy v Ant museli uživatelé spravovat závislosti lokálně. Maven nejprve přijal filozofii správy závislostí.
Přísné standardy Mavens však ztěžují psaní vlastních sestavovacích skriptů. S tímto nástrojem se snadno pracuje, pokud projekt splňuje přísné standardy.
Profesionálové
- Automatické stahování závislostí
- Všechny závislosti jsou automaticky zaznamenávány do řízení zdroje jako součást skriptů Maven
- Standardizuje a zjednodušuje proces sestavení
- Snadno se integruje s IDE a systémy CI / CD
Nevýhody
- Při vytváření vlastních pracovních postupů není flexibilní
- Strmá křivka učení a proces je pro nováčky obtížné pochopit
- Časově náročné řešení problémů se sestavením a nové integrace knihoven
- Není dobré s více verzemi stejné závislosti
Příklad Maven
Zde si můžete stáhnout nejnovější Maven. Instalaci můžete zkontrolovat takto:
$ mvn - verzeApache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00: 58: 13-07: 00)
Domovská stránka Maven: / Users / zak / BuildTools / Maven / apache-maven-3.5.2
Verze Java: 1.8.0_74, prodejce: Oracle Corporation
Domovská stránka Java: / Library / Java / JavaVirtualMachines / jdk1.8.0_74.jdk / Obsah / Domů / jre
Výchozí národní prostředí: en_US, kódování platformy: UTF-8
Název OS: „mac os x“, verze: „10.11.6 ", arch:" x86_64 ", rodina:" mac "
Vytvořte složku helloworld a vygenerujte projekt pomocí následujícího příkazu:
$ mvn archetyp: generate -DgroupId = com.Jméno společnosti.helloworld -DartifactId = helloworld-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode = false
Měl by vytvořit strukturu složek a vygenerovat výstup, který vypadá takto:
[INFO] Hledání projektů…[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin: 3.0.0: generate (default-cli)> generate-sources
@ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin: 3.0.0: generate (default-cli) @ standalone-pom ---
[INFO] Generování projektu v dávkovém režimu
[INFO] ----------------------------------------------------------------------------
[INFO] Použití následujících parametrů pro vytvoření projektu ze starého (1.x) Archetyp:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parametr: basedir, hodnota: / Users / zak / _work / LearnBuildScripts / LearnMaven
[INFO] Parametr: balíček, hodnota: kom.Jméno společnosti.Ahoj světe
[INFO] Parametr: groupId, hodnota: com.Jméno společnosti.Ahoj světe
[INFO] Parametr: artifactId, hodnota: helloworld
[INFO] Parametr: název_balíku, hodnota: kom.Jméno společnosti.Ahoj světe
[INFO] Parametr: verze, hodnota: 1.0-SNAPSHOT
[INFO] projekt vytvořený ze starého (1.x) Archetyp v adresáři: / Users / zak / _work /
LearnBuildScripts / LearnMaven / helloworld
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Celkový čas: 8.602 s
[INFO] Hotovo v: 2018-01-27T00: 05: 37-08: 00
[INFO] Konečná paměť: 15M / 152M
[INFO] ------------------------------------------------------------------------
Struktura složek by měla vypadat takto:
Ahoj světe| - pom.xml
'- src
| - hlavní
| '- java
| '- com
| '-- Jméno společnosti
| '-- Ahoj světe
| '-- Aplikace.Jáva
'-- test
'- java
'- com
'-- Jméno společnosti
'-- Ahoj světe
'- AppTest.Jáva
Pom.xml obsahuje konfigurace sestavení. Uvnitř pom.xml kód vypadá takto:
_0.xsd ">
Soubor jar můžete vygenerovat pomocí následujícího příkazu:
$ mvn balíček[INFO] Hledání projektů…
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Budování helloworldu 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- plugin maven-resources: 2.6: resources (default-resources) @ helloworld ---
[UPOZORNĚNÍ] Použití kódování platformy (ve skutečnosti UTF-8) ke kopírování filtrovaných zdrojů, tj.E.
build je závislý na platformě!
[INFO] přeskočit neexistující resourceDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / main / resources
[INFO]
[INFO] --- plugin maven-compiler: 3.1: compile (default-compile) @ helloworld ---
[INFO] Zjištěné změny - překompilování modulu!
[UPOZORNĚNÍ] Nebylo nastaveno kódování souborů pomocí kódování platformy UTF-8, tj.E. stavět je
závislé na platformě!
[INFO] Kompilace 1 zdrojového souboru do / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / cíl / třídy
[INFO]
[INFO] --- plugin maven-resources: 2.6: testResources (default-testResources) @
Ahoj světe ---
[UPOZORNĚNÍ] Použití kódování platformy (ve skutečnosti UTF-8) ke kopírování filtrovaných zdrojů, tj.E.
build je závislý na platformě!
[INFO] přeskočit neexistující resourceDirectory / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / test / zdroje
[INFO]
[INFO] --- plugin maven-compiler: 3.1: testCompile (default-testCompile) @ helloworld ---
[INFO] Zjištěné změny - překompilování modulu!
[UPOZORNĚNÍ] Nebylo nastaveno kódování souborů pomocí kódování platformy UTF-8, tj.E. stavět je
závislé na platformě!
[INFO] Kompilace 1 zdrojového souboru do / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target / test-classes
[INFO]
[INFO] --- maven-surefire-plugin: 2.12.4: test (default-test) @ helloworld ---
[INFO] Surefire report adresář: / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / cíl /
jisté zprávy o ohni
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Běžící com.Jméno společnosti.Ahoj světe.AppTest
Provedené testy: 1, selhání: 0, chyby: 0, přeskočení: 0, uplynulý čas: 0.014 s
Výsledek :
Provedené testy: 1, selhání: 0, chyby: 0, přeskočení: 0
[INFO]
[INFO] --- maven-jar-plugin: 2.4: jar (default-jar) @ helloworld ---
[INFO] Stavební nádoba: / Users / zak / _work / LearnBuildScripts / LearnMaven / helloworld / target /
helloworld-1.0-SNAPSHOT.sklenice
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Celkový čas: 5.624 s
[INFO] Hotovo v: 2018-01-27T00: 11: 10-08: 00
[INFO] Konečná paměť: 16M / 114M
[INFO] ------------------------------------------------------------------------
Soubor jar můžete spustit takto:
$ java -cp target / helloworld-1.0-SNAPSHOT.jar com.Jméno společnosti.Ahoj světe.AplikaceAhoj světe!
Soubor jar se vloží do cílové složky.
Gradle
Gradle kombinuje sílu Ant a Maven. První verze Gradle byla vydána v roce 2012. Došlo k rychlému přijetí. Google jej aktuálně používá pro OS Android.
Místo XML používá Gradle jazyk Groovy. Výsledkem je, že vytváření skriptů v Gradle se snadněji zapisuje a čte. Zpočátku používala Ivy pro správu závislostí, ale nyní používá vlastní modul závislostí.
Profesionálové
- Poskytuje standardizaci při zachování flexibility
- Snadno čitelné a psané sestavovací skripty
- Lepší zpracování více verzí závislostí
- Schopen zvládnout více programovacích jazyků a technologií
- Aktivní komunita pomáhá vyvíjet nástroj
- Gradle DSL (Domain-Specific Language) umožňuje jednoduchou strukturu konfigurace
- Gradle poskytuje vylepšení výkonu pomocí postupného vytváření mezipaměti a démona Gradle
Nevýhody
- Integrace IDE není tak dobrá jako Maven
Příklad gradle
Zde můžete nainstalovat Gradle. Jakmile nastavíte Gradle ve své cestě, můžete to zkontrolovat pomocí:
$ gradle - verze------------------------------------------------------------
Stupeň 4.5
------------------------------------------------------------
Čas sestavení: 2018-01-24 17:04:52 UTC
Revize: 77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy: 2.4.12
Ant: Apache Ant (TM) verze 1.9.9 sestaveno 2. února 2017
JVM: 1.8.0_74 (Oracle Corporation 25.74-b02)
OS: Mac OS X 10.11.6 x86_64
Dále vytvořte následující adresářovou strukturu:
Ahoj světe| - sestavení.gradle
'- src
| - hlavní
'- java
'-- Ahoj světe
'-- Ahoj světe.Jáva
Pro helloworld.java vložila kód z příkladu Ant. A pro stavění.gradle vložte následující kód:
použít plugin: 'java'verze = '1.0 '
repozitáře
mavenCentral ()
závislosti
testCompile group: 'junit', name: 'junit', version: '4.12 '
Chcete-li se podívat na všechny dostupné příkazy, můžete použít příkaz „gradle tasks -all“. Gradle automaticky vyzvedne pluginy, které určíte v sestavení.soubor gradle a zobrazí vám další úkoly, které jsou díky pluginům k dispozici.
Sestavení můžete získat spuštěním:
$ gradle jarBUILD ÚSPĚŠNÝ za 1 s
2 proveditelné úkoly: 2 provedeny
Svou sklenici můžete spustit takto:
$ java -cp build / libs / helloworld-1.0.jar helloworldAhoj světe!
Soubor jar je vložen do složky build / libs.
Závěr
Mezi nástroji pro sestavení může být Ant užitečný pro menší projekty, zatímco Maven je lepší pro zajištění toho, aby všichni vývojáři dodržovali stejná pravidla. Gradle je nejnovější nástroj, který poskytuje největší flexibilitu.
Reference:
- http: // mravenec.apache.org /
- http: // mravenec.apache.org / břečťan /
- https: // maven.apache.org /
- https: // gradle.org /
- http: // makble.com / gradle-junit-helloworld-příklad
- https: // příklady.javacodegeeks.com / core-java / gradle / gradle-hello-world-tutorial /
- https: // gradle.org / maven-vs-gradle /
- https: // maven.apache.org / průvodci / Začínáme / Maven-in-pět-minut.html
- https: // stackoverflow.com / questions / 20755437 / java-build-tools-ant-vs-maven
- https: // technologické konverzace.com / 2014/06/18 / build-tools /
- https: // www.kvora.com / What-are-the-klady a -kony-of-Maven-versus-Ant-as-building-tools-for-Java