Během vývoje softwaru musí vývojáři znovu a znovu vytvářet stejný kód. Často se snaží automatizovat úlohu pomocí skriptů bash nebo jiných skriptovacích jazyků. Existují však nástroje pro sestavení, které jsou vhodnější pro automatizaci sestavení. Převládajícími stavebními nástroji jsou:
Pojďme prozkoumat nástroje, abychom zjistili více.
Apache Ant s Ivy
Apache Ant je nástroj příkazového řádku založený na jazyce Java, který používá soubory XML k definování skriptů sestavení. Používá se převážně pro sestavení Java, ale může být také použit pro vývoj C/C ++. Vestavěné úlohy poskytují způsoby kompilace, montáže, testování a spouštění softwarových aplikací. Uživatelé mohou také vytvářet 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 byl zahájen v roce 2000.
Profesionálové
- Lepší kontrola nad celým procesem sestavení
- Dostatečně flexibilní, aby fungoval s jakýmkoli pracovním procesem
Nevýhody
- Soubory sestavení založené na XML mohou být velké a neudržitelné
- K údržbě skriptů sestavení je potřeba hodně času a prostředků
- Integrace IDE je obtížné dosáhnout
Mravenec s břečťanem Příklad
Můžete si nainstalovat nejnovější Ant z tady . Musíte stáhnout zip, rozbalit a umístit složku bin do cesty. Chcete -li zjistit, zda je Ant správně nainstalován, můžete použít následující příkaz:
$ mravenec-verzeApache Ant(TM)verze 1.10.1 sestavená v únoru2 2017
Jakmile máte nainstalovaného Ant, můžete si stáhnout nejnovější Ivy jar a dát jej do složky lib uvnitř adresáře Ant.
Po instalaci Ant vytvořte složky helloworld a helloworld/src. Do složky src vložte soubor helloworld.java s kódem:
/ **************************Vytiskne „Hello World!“
**************************
veřejnost třídaAhoj světe{
veřejnost statický prázdnéhlavní( Tětiva []args) {
Systém .ven.println('Ahoj světe!');
}
}
Nyní ve složce helloworld vytvořte soubor build.xml s následujícím kódem:
A ve stejné složce helloworld vytvořte soubor ivy.xml s následujícím kódem:
>
Struktura adresářů by měla vypadat takto:
Ahoj světe|- build.xml
| - ivy.xml
`- src
`- helloworld.java
Nyní můžete sestavení spustit příkazem:
$mravenecskleniceÚspěšné sestavení by mělo poskytovat výstup takto:
$ mravenčí džbánBuildfile: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml
odhodlání:
[ivy: retrieve] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy: retrieve] :: načítání nastavení :: url = jar: soubor:/Users/zak/BuildTools/ANT/apache
-ant-1.10.1/lib/ivy-2.4.0.jar! /org/apache/ivy/core/settings/ivysettings.xml
[ivy: retrieve] :: řešení závislostí :: org.apache#helloworld; [chráněno emailem]
MacBook-Air.local
[ivy: retrieve] confs: [výchozí]
[ivy: retrieve] nalezeno junit#junit; 4.12 na veřejnosti
[ivy: retrieve] nalezeno org.hamcrest#hamcrest-core; 1,3 na veřejnosti
[ivy: retrieve] :: zpráva o řešení :: vyřešit 397 ms :: artefakty dl 15 ms
---------------------------------------------------------- -------------------
| | moduly || artefakty |
| conf | číslo | hledat | vyčerpán | vystěhován || číslo | staženo |
---------------------------------------------------------- -------------------
| výchozí | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------- -------------------
[ivy: retrieve] :: načítání :: org.apache#helloworld
[ivy: retrieve] confs: [výchozí]
[ivy: načíst] 0 zkopírovaných artefaktů, 4 již načteny (0 kB/39 ms)
kompilovat:
[mkdir] Vytvořeno:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
třídy
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: varování:
'includeseantruntime' nebylo nastaveno, výchozí je build.sysclasspath = last; nastaveno na hodnotu false
pro opakovatelná sestavení
[javac] Kompilace 1 zdrojového souboru do/Users/zak/_work/LearnBuildScripts/LearnANT/
helloworld/build/classes
sklenice:
[mkdir] Vytvořeno:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[jar] Building jar:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
helloworld.jar
BUILD ÚSPĚŠNÝ
Celkový čas: 6 sekund
Soubor jar můžete vyzkoušet takto:
$ java -cp build/bin/helloworld.skleniceAhoj světeAhoj 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 mravenec zavolá cíl jar v souboru build.xml.
Mavene
Maven byl vyvinut k vyřešení problémů, se kterými se potýká skriptování na bázi Ant. Uchovala soubory XML, ale zvolila jiný přístup k organizaci. V Ant musí vývojáři vytvořit všechny úkoly. Maven snižuje vytváření úkolů implementací silnějších standardů pro organizaci kódu. V důsledku toho je snazší začít se standardními projekty.
Rovněž zavedlo stahování závislostí, které 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 skriptů pro sestavení. S nástrojem se snadno pracuje, pokud projekt splňuje přísné normy.
Profesionálové
- Automatické stahování závislostí
- Všechny závislosti jsou automaticky zaznamenávány ve správě zdrojů jako součást skriptů Maven
- Standardizuje a zjednodušuje proces sestavení
- Snadno se integruje s IDE a systémy CI/CD
Nevýhody
- Není flexibilní při vytváření vlastních pracovních toků
- Prudká 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 Mavena
Nejnovější Maven si můžete stáhnout z tady . Instalaci můžete zkontrolovat takto:
$ mvn --versionApache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00:58:13-07: 00)
Domov Maven: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Verze Java: 1.8.0_74, dodavatel: 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.Ahoj světe-DartifactId = helloworld-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =Nepravdivé
Mělo by to vytvořit strukturu složek a vygenerovat výstup, který vypadá takto:
[INFO] Skenování projektů ...[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Budování projektu Maven Stub (bez 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
@ samostatná 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) archetypu:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------- -----------------------------
[INFO] Parametr: basedir, Hodnota:/Uživatelé/zak/_work/LearnBuildScripts/LearnMaven
[INFO] Parametr: balíček, Hodnota: com.companyname.helloworld
[INFO] Parametr: groupId, Hodnota: com.companyname.helloworld
[INFO] Parametr: artifactId, Hodnota: helloworld
[INFO] Parametr: název balíku, hodnota: com.firma.helloworld
[INFO] Parametr: verze, Hodnota: 1,0-SNAPSHOT
[INFO] projekt vytvořený ze starého archivu (1.x) v adresáři:/Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[INFO] ----------------------------------------------- -------------------------
[INFO] VYTVOŘTE ÚSPĚCH
[INFO] ----------------------------------------------- -------------------------
[INFO] Celkový čas: 8,602 s
[INFO] Dokončeno 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í
| ``-Jáva
| ``- s
| ``-- Jméno společnosti
| ``-- Ahoj světe
| ``- App.java
``-test
``-Jáva
``- s
``-- Jméno společnosti
``-- Ahoj světe
``- AppTest.java
Pom.xml obsahuje konfigurace sestavení. Uvnitř pom.xml vypadá kód takto:
Instance XMLSchema '
xsi: schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>
>
>
Soubor jar můžete vygenerovat pomocí následujícího příkazu:
$ mvn balíček[INFO] Skenování projektů ...
[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Budování helloworld 1.0-SNAPSHOT
[INFO] ----------------------------------------------- -------------------------
[INFO]
[INFO] --- maven-resources-plugin: 2.6: resources (default-resources) @ helloworld ---
[UPOZORNĚNÍ] Kopírování filtrovaných zdrojů, tj. Kódování platformy (ve skutečnosti UTF-8), tj.
build je závislý na platformě!
[INFO] přeskočit neexistující resourceDirectory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: compile (default-compile) @ helloworld ---
[INFO] Byly zjištěny změny - překompilování modulu!
[UPOZORNĚNÍ] Kódování souboru nebylo nastaveno pomocí kódování platformy UTF-8, tj. Build je
závislé na platformě!
[INFO] Kompilace 1 zdrojového souboru do/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/cíl/třídy
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (default-testResources) @
Ahoj světe ---
[UPOZORNĚNÍ] Kopírování filtrovaných zdrojů, tj. Kódování platformy (ve skutečnosti UTF-8), tj.
build je závislý na platformě!
[INFO] přeskočit neexistující resourceDirectory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/test/zdroje
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (default-testCompile) @ helloworld ---
[INFO] Byly zjištěny změny - překompilování modulu!
[UPOZORNĚNÍ] Kódování souboru nebylo nastaveno pomocí kódování platformy UTF-8, tj. Build 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] Adresář přehledů Surefire:/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/
jisté zprávy o požáru
---------------------------------------------------------- -----
T E S T S
---------------------------------------------------------- -----
Spuštěno com.companyname.helloworld.AppTest
Spuštěné testy: 1, Selhání: 0, Chyby: 0, Přeskočeno: 0, Uplynulý čas: 0,014 s
Výsledek :
Spuštěné testy: 1, Selhání: 0, Chyby: 0, Přeskočené: 0
[INFO]
[INFO] --- maven-jar-plugin: 2.4: jar (default-jar) @ helloworld ---
[INFO] Stavebnice:/Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
helloworld-1.0-SNAPSHOT.jar
[INFO] ----------------------------------------------- -------------------------
[INFO] VYTVOŘTE ÚSPĚCH
[INFO] ----------------------------------------------- -------------------------
[INFO] Celkový čas: 5,624 s
[INFO] Dokončeno 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-MOMENTKA.sklenices.Jméno společnosti.Ahoj světe.AplikaceAhoj světe!
Soubor jar je vložen do cílové složky.
Gradle
Gradle kombinuje sílu Ant a Mavena. První verze Gradle byla vydána v roce 2012. Dočkala se rychlého přijetí. Google jej aktuálně používá pro OS Android.
Místo XML používá Gradle jazyk Groovy. Výsledkem je, že se skripty sestavení v Gradle snáze zapisují a čtou. Původně používal Ivy pro správu závislostí, ale nyní používá svůj vlastní modul závislostí.
Profesionálové
- Poskytuje standardizaci a zároveň zůstává flexibilní
- Snadno čitelné a zapisovatelné skripty
- Lepší zpracování více verzí závislostí
- Dokáže zvládnout více programovacích jazyků a technologií
- Aktivní komunita pomáhá vyvíjet nástroj
- Gradle DSL (Domain-Specific Language) zjednodušuje strukturu konfigurace
- Gradle poskytuje vylepšení výkonu pomocí postupného vytváření mezipaměti a Gradle Daemon
Nevýhody
- Integrace IDE není tak dobrá jako Maven
Příklad gradle
Gradle můžete nainstalovat z tady . Jakmile na své cestě nastavíte Gradle, můžete ji zkontrolovat takto:
$ gradle--verze---------------------------------------------------------- ----------
Gradle4.5
---------------------------------------------------------- ----------
Čas sestavení:2018-01-24 17: 04:52UTC
Revize: 77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy: 2.4.12
Mravenec: Apache Ant(TM)verze 1.9.9 sestavená v únoru2 2017
JVM: 1.8.0_74(Oracle Corporation25,74-b02)
OS: Mac OS X 10.11.6 x86_64
Dále vytvořte následující strukturu adresářů:
Ahoj světe| -stavět.gradle
``-src
| -hlavní
``-Jáva
``-Ahoj světe
``-Ahoj světe.Jáva
Pro helloworld.java vložte kód z příkladu Ant. A pro build.gradle vložte následující kód:
použít plugin: 'Jáva'verze= '1,0'
úložiště{
mavenCentral()
}
závislosti{
skupina testCompile: 'junit', název: 'junit', verze: '4.12'
}
Pomocí příkazů gradle tasks –all můžete prohlížet všechny dostupné příkazy. Gradle automaticky vyzvedne doplňky, které zadáte v souboru build.gradle, a zobrazí vám další úkoly, které jsou díky zásuvným modulům k dispozici.
Sestavu můžete získat spuštěním:
$ gradle jarSTAVĚT ÚSPĚŠNÝ za 1 s
2použitelné úkoly:2popraven
Svůj jar můžete spustit takto:
$ java -cp build/libs/helloworld-1,0.skleniceAhoj světeAhoj světe!
Soubor jar je vložen do složky build/libs.
Závěr
Mezi nástroji pro sestavování 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://ant.apache.org/
- http://ant.apache.org/ivy/
- https://maven.apache.org/
- https://gradle.org/
- http://makble.com/gradle-junit-helloworld-example
- https://examples.javacodegeeks.com/core-java/gradle/gradle-hello-world-tutorial/
- https://gradle.org/maven-vs-gradle/
- https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
- https://stackoverflow.com/questions/20755437/java-build-tools-ant-vs-maven
- https://technologyconversations.com/2014/06/18/build-tools/
- https://www.quora.com/What-are-the-pros-and-cons-of-Maven-versus-Ant-as-building-tools-for-Java