Mravenec vs Maven vs Gradle

Ant Vs Maven Vs Gradle



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-verze
Apache 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:

xmlns: břečťan='antlib: org.apache.ivy.ant' název='Ahoj světe' výchozí='sklenice'>

název='src.dir' hodnota='src'/>
název='build.dir' hodnota='stavět'/>
název='classes.dir' hodnota='$ {build.dir}/classes'/>
název='am.dir' hodnota='$ {build.dir} / bin'/>
název='lib.dir' hodnota='lib' />
id='lib.path.id'>
tobě='$ {lib.dir}' />
>

název='odhodlání'>
/>
>

název='čistý'>
tobě='$ {build.dir}'/>
>

název='kompilovat' záleží='odhodlání'>
tobě='$ {classes.dir}'/>
srcdir='$ {src.dir}' destdir='$ {classes.dir}' classpathref='lib.path.id'/>
>

název='sklenice' záleží='kompilovat'>
tobě='$ {bin.dir}'/>
destfile='$ {bin.dir}/$ {ant.project.name} .jar' basedir='$ {classes.dir}'/>
>

>

A ve stejné složce helloworld vytvořte soubor ivy.xml s následujícím kódem:

verze='2,0'>
organizace='org.apache' modul='Ahoj světe'/>
>
org='junit' název='junit' rev='4.12'/>
>
>

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án
Buildfile: /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ěte
Ahoj 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 --version
Apache 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:

xmlns='http://maven.apache.org/POM/4.0.0' xmlns: xsi='http://www.w3.org/2001/
Instance XMLSchema '
xsi: schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>
>4.0.0>
>com.companyname.helloworld>
>Ahoj světe>
>sklenice>
>1,0-SNAPSHOT>
>Ahoj světe>
>http://maven.apache.org>
>
>
>junit>
>junit>
>3.8.1>
>test>
>
>
>

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.Aplikace
Ahoj 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 jar

STAVĚ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ěte
Ahoj 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: