Mravenec vs Maven vs Gradle

Ant Vs Maven Vs Gradle



Pri vývoji softvéru musia vývojári znova a znova vytvárať ten istý kód. Na automatizáciu úlohy sa často pokúšajú použiť bash skripty alebo iné skriptovacie jazyky. K dispozícii sú však nástroje na zostavenie, ktoré sú vhodnejšie pre automatizáciu zostavovania. Prevládajúcimi stavebnými nástrojmi sú:

Poďme preskúmať nástroje a zistiť viac.







Apache Ant s Ivy

Apache Ant je nástroj príkazového riadka založený na jazyku Java, ktorý používa súbory XML na definovanie skriptov na vytváranie. Používa sa predovšetkým na zostavenia Java, ale môže sa použiť aj na vývoj C/C ++. Vstavané úlohy poskytujú spôsoby kompilácie, zostavovania, testovania a spúšťania softvérových aplikácií. Používatelia môžu tiež vytvárať svoje vlastné dokumenty na zvýšenie funkčnosti Ant. Apache Ivy je nástroj na správu závislostí, ktorý sa ľahko integruje s Ant a poskytuje robustnejší ekosystém. Vývoj Ant bol zahájený v roku 2000.



Pros



  • Lepšia kontrola nad celým procesom zostavenia
  • Dostatočne flexibilný na prácu s akýmkoľvek pracovným procesom

Zápory





  • Súbory buildu založené na XML môžu byť veľké a neudržateľné
  • Na údržbu skriptov na zostavenie je potrebných veľa času a zdrojov
  • Integráciu IDE je ťažké dosiahnuť

Mravec s brečtanom Príklad

Najnovší Ant môžete nainštalovať z tu . Musíte stiahnuť zip, rozbaliť a vložiť priečinok s priečinkami do cesty. Ak chcete zistiť, či je Ant správne nainštalovaný, môžete použiť nasledujúci príkaz:

$ mravec-verzia
Apache Ant(TM)verzia 1.10.1 zostavená vo februári2 2017.

Akonáhle máte nainštalovaný Ant, môžete si stiahnuť najnovší Ivy jar a vložiť ho do priečinka lib v adresári Ant.



Potom, čo budete mať nainštalovaného Ant, vytvorte priečinky helloworld a helloworld/src. Do priečinka src vložte súbor helloworld.java s kódom:

/ **************************

Vytlačí „Hello World!“

*************************

verejná triedahelloworld{

verejná statický prázdnyHlavná( Reťazec []args) {
Systém .von.println(„Ahoj, svet!“);
}

}

Teraz v priečinku helloworld vytvorte súbor build.xml s nasledujúcim kódom:

xmlns: brečtan='antlib: org.apache.ivy.ant' názov='helloworld' predvolené='jar'>

názov='src.dir' hodnotu='src'/>
názov='build.dir' hodnotu='stavať'/>
názov='classes.dir' hodnotu='$ {build.dir}/triedy'/>
názov='am.dir' hodnotu='$ {build.dir} / bin'/>
názov='lib.dir' hodnotu='lib' />
id='lib.path.id'>
k vám='$ {lib.dir}' />
>

názov='vyriešiť'>
/>
>

názov='čistý'>
k vám='$ {build.dir}'/>
>

názov='zostaviť' závisí='vyriešiť'>
k vám='$ {classes.dir}'/>
srcdir='$ {src.dir}' destdir='$ {classes.dir}' classpathref='lib.path.id'/>
>

názov='jar' závisí='zostaviť'>
k vám='$ {bin.dir}'/>
destfile='$ {bin.dir}/$ {ant.project.name} .jar' basedir='$ {classes.dir}'/>
>

>

A v rovnakom priečinku helloworld vytvorte súbor ivy.xml s nasledujúcim kódom:

verzia=„2,0“>
Organizácia=„org.apache“ modul='helloworld'/>
>
org='junit' názov='junit' rev=„4.12“/>
>
>

Štruktúra adresárov by mala vyzerať takto:

helloworld
|- build.xml
| - ivy.xml
`- src
`- helloworld.java

Teraz môžete zostavenie spustiť pomocou príkazu:

$mravecjar

Úspešná zostava by mala poskytovať výstup takto:

$ mravec
Súbor zostavy: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml

vyriešiť:
[ivy: retrieve] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy: retrieve] :: nastavenia načítania :: url = jar: súbor:/Users/zak/BuildTools/ANT/apache
-ant-1.10.1/lib/ivy-2.4.0.jar! /org/apache/ivy/core/settings/ivysettings.xml
[ivy: retrieve] :: riešenie závislostí :: org.apache#helloworld; [chránené e -mailom]
MacBook-Air.local
[ivy: retrieve] confs: [predvolené]
[ivy: retrieve] našiel junit#junit; 4.12 na verejnosti
[ivy: retrieve] našiel org.hamcrest#hamcrest-core; 1,3 na verejnosti
[ivy: retrieve] :: správa o riešení :: vyriešiť 397 ms :: artefakty dl 15 ms
---------------------------------------------------------- -------------------
| | moduly || artefakty |
| conf | číslo | hľadať | vyčerpaný | vysťahovaný || číslo | stiahnuté |
---------------------------------------------------------- -------------------
| predvolené | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------- -------------------
[ivy: retrieve] :: retrieving :: org.apache#helloworld
[ivy: retrieve] confs: [predvolené]
[ivy: retrieve] 0 skopírovaných artefaktov, 4 už boli načítané (0 kB/39 ms)

zostaviť:
[mkdir] Vytvoril adresár:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
triedy
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: upozornenie:
'includeseantruntime' nebol nastavený, predvolene je build.sysclasspath = last; nastavené na hodnotu false
pre opakovateľné zostavy
[javac] Kompilácia 1 zdrojového súboru do/Users/zak/_work/LearnBuildScripts/LearnANT/
helloworld/build/classes

nádoba:
[mkdir] Vytvoril adresár:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[jar] Stavebnica:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
helloworld.jar

BUDOVANÉ ÚSPEŠNÉ
Celkový čas: 6 sekúnd

Súbor jar môžete vyskúšať takto:

$ java -cp build/bin/helloworld.jarhelloworld
Ahoj Svet!

Definovali sme súbor jar, ktorý sa má vložiť do priečinka build/bin. Priečinky sa vytvoria počas zostavovania. Príkaz mravca jar zavolá cieľ jar v súbore build.xml.

Maven

Maven bol vyvinutý na vyriešenie problémov, s ktorými sa stretáva skriptovanie na základe mravcov. Uchovával súbory XML, ale využil iný prístup k organizácii. V aplikácii Ant musia vývojári vytvoriť všetky úlohy. Maven znižuje vytváranie úloh implementáciou prísnejších štandardov pre organizovanie kódu. Výsledkom je, že je jednoduchšie začať so štandardnými projektmi.

Zaviedlo tiež sťahovanie závislostí, ktoré uľahčilo vývoj. Pred zavedením Ivy v Ant museli užívatelia spravovať závislosti lokálne. Maven najskôr prijal filozofiu riadenia závislostí.

Prísne štandardy Mavens však sťažujú písanie vlastných skriptov na zostavenie. S nástrojom sa ľahko pracuje, pokiaľ projekt dodržiava prísne normy.

Pros

  • Automatické sťahovanie závislostí
  • Všetky závislosti sa automaticky zaznamenávajú do správy zdrojov ako súčasť skriptov Maven
  • Štandardizuje a zjednodušuje proces vytvárania
  • Ľahko sa integruje s IDE a systémami CI/CD

Zápory

  • Nie je flexibilné pri vytváraní vlastných pracovných tokov
  • Prudká krivka učenia a proces je pre nováčikov ťažké pochopiť
  • Riešenie problémov so zostavením a nových integrácií knižníc je časovo náročné
  • Nie je dobré s viacerými verziami tej istej závislosti

Príklad Mavena

Najnovší Maven si môžete stiahnuť z tu . Inštaláciu môžete skontrolovať takto:

$ mvn --verzia
Apache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017.-10-18T00:58:13-07: 00)
Domov Maven: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Verzia Java: 1.8.0_74, výrobca: Oracle Corporation
Domovská stránka Java: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Obsah/Domov/jre
Predvolené miestne nastavenie: en_US, kódovanie platformy: UTF-8
Názov OS:'mac os x', verzia:'10 .11,6 ', oblúk:„x86_64“, rodina:'mac'

Vytvorte priečinok helloworld a vygenerujte projekt pomocou nasledujúceho príkazu:

$ mvn archetyp: generate -DgroupId = com.meno spoločnosti.helloworld-DartifactId = helloworld
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =falošný

Malo by to vytvoriť štruktúru priečinkov a vygenerovať výstup, ktorý vyzerá takto:

[INFO] Hľadajú sa projekty ...
[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Projekt Building 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] Generuje sa projekt v dávkovom režime
[INFO] ----------------------------------------------- -----------------------------
[INFO] Použitie nasledujúcich parametrov na vytvorenie projektu zo starého (1.x) archetypu:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------- -----------------------------
[INFO] Parameter: basedir, Hodnota:/Users/zak/_work/LearnBuildScripts/LearnMaven
[INFO] Parameter: balík, Hodnota: com.companyname.helloworld
[INFO] Parameter: groupId, Hodnota: com.companyname.helloworld
[INFO] Parameter: artifactId, Hodnota: helloworld
[INFO] Parameter: packageName, Hodnota: com.companyname.helloworld
[INFO] Parameter: verzia, Hodnota: 1,0-SNAPSHOT
[INFO] projekt vytvorený zo starého (1.x) archetypu v adresári:/Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[INFO] ----------------------------------------------- -------------------------
[INFO] VYBUDUJTE ÚSPECH
[INFO] ----------------------------------------------- -------------------------
[INFO] Celkový čas: 8,602 s
[INFO] Dokončené o: 2018-01-27T00: 05: 37-08: 00
[INFO] Konečná pamäť: 15M/152M
[INFO] ----------------------------------------------- -------------------------

Štruktúra priečinkov by mala vyzerať takto:

helloworld
|- pom.xml
- src
|-- Hlavná
| -java
| - s
| -- meno spoločnosti
| - helloworld
| - App.java
-test
-java
- s
-- meno spoločnosti
- helloworld
- AppTest.java

Pom.xml obsahuje konfigurácie zostavenia. Vo vnútri pom.xml kód vyzerá takto:

xmlns='http://maven.apache.org/POM/4.0.0' xmlns: xsi=„http://www.w3.org/2001/
Inštancia 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>
>helloworld>
>jar>
>1,0-SNAPSHOT>
>helloworld>
>http://maven.apache.org>
>
>
>junit>
>junit>
>3.8.1>
>test>
>
>
>

Súbor jar môžete vygenerovať pomocou nasledujúceho príkazu:

balík $ mvn

[INFO] Hľadajú sa projekty ...
[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Budovanie helloworld 1.0-SNAPSHOT
[INFO] ----------------------------------------------- -------------------------
[INFO]
[INFO] --- maven-resources-plugin: 2.6: resources (default-resources) @ helloworld ---
[UPOZORNENIE] Použitie kódovania platformy (v skutočnosti UTF-8) na kopírovanie filtrovaných zdrojov, t.j.
zostavenie závisí od platformy!
[INFO] preskočiť neexistujúci adresár resourceDirectory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: compile (default-compile) @ helloworld ---
[INFO] Zistené zmeny - prekompilovanie modulu!
[UPOZORNENIE] Kódovanie súboru nebolo nastavené pomocou kódovania platformy UTF-8, t.j. zostavenie je
závislé od platformy!
[INFO] Kompilácia 1 zdrojového súboru do/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/cieľ/triedy
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (default-testResources) @
helloworld ---
[UPOZORNENIE] Použitie kódovania platformy (v skutočnosti UTF-8) na kopírovanie filtrovaných zdrojov, t.j.
zostavenie závisí od platformy!
[INFO] preskočiť neexistujúci adresár resourceDirectory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/test/zdroje
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (default-testCompile) @ helloworld ---
[INFO] Zistené zmeny - prekompilovanie modulu!
[UPOZORNENIE] Kódovanie súboru nebolo nastavené pomocou kódovania platformy UTF-8, t.j. zostavenie je
závislé od platformy!
[INFO] Kompilácia 1 zdrojového súboru do/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin: 2.12.4: test (default-test) @ helloworld ---
[INFO] Adresár správ Surefire:/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/
správy o istote

---------------------------------------------------------- -----
T E S T S
---------------------------------------------------------- -----
Spustené com.companyname.helloworld.AppTest
Spustené testy: 1, Zlyhania: 0, Chyby: 0, Vynechané: 0, Uplynutý čas: 0,014 s

Výsledky:

Spustené testy: 1, Zlyhania: 0, Chyby: 0, Vynechané: 0

[INFO]
[INFO] --- maven-jar-plugin: 2.4: jar (default-jar) @ helloworld ---
[INFO] Stavebnica:/Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
helloworld-1.0-SNAPSHOT.jar
[INFO] ----------------------------------------------- -------------------------
[INFO] VYBUDUJTE ÚSPECH
[INFO] ----------------------------------------------- -------------------------
[INFO] Celkový čas: 5,624 s
[INFO] Skončené o: 2018-01-27T00: 11: 10-08: 00
[INFO] Konečná pamäť: 16M/114M
[INFO] ----------------------------------------------- -------------------------

Súbor jar môžete spustiť takto:

$ java -cp target/helloworld-1,0-SNAPSHOT.jars.meno spoločnosti.helloworld.Aplikácia
Ahoj Svet!

Súbor jar je vložený do cieľového priečinka.

Gradle

Gradle kombinuje silu Ant a Mavena. Prvá verzia Gradle bola vydaná v roku 2012. Dočkala sa rýchleho prijatia. Google ho v súčasnosti používa pre operačný systém Android.

Namiesto XML používa Gradle jazyk Groovy. Výsledkom je, že zostavovacie skripty v Gradle sa ľahšie píšu a čítajú. Pôvodne používal Ivy na správu závislostí, ale teraz používa svoj vlastný nástroj na vytváranie závislostí.

Pros

  • Poskytuje štandardizáciu a zároveň zostáva flexibilný
  • Ľahko čitateľné a zapisovateľné skripty
  • Lepšie zvládnuť viac verzií závislostí
  • Dokáže ovládať viacero programovacích jazykov a technológií
  • Aktívna komunita pomáha vyvíjať nástroj
  • Gradle DSL (jazyk špecifický pre doménu) uľahčuje konfiguráciu
  • Gradle poskytuje vylepšenia výkonu postupným používaním, vytváraním vyrovnávacej pamäte a programu Gradle Daemon

Zápory

  • Integrácia IDE nie je taká dobrá ako Maven

Príklad gradle

Gradle môžete nainštalovať z tu . Hneď ako nastavíte Gradle na svojej ceste, môžete ho skontrolovať takto:

$ gradle--verzia

---------------------------------------------------------- ----------
Gradle4.5
---------------------------------------------------------- ----------

Čas stavby:2018-01-24 17: 04:52UTC
Revízia: 77d0ec90636f43669dc794ca17ef80dd65457bec

Groovy: 2.4.12
Mravec: Apache Ant(TM)verzia 1.9.9 zostavená vo februári2 2017.
JVM: 1,8.0_74(Oracle Corporation25,74-b02)
OS: Mac OS X 10.11.6 x86_64

Ďalej vytvorte nasledujúcu adresárovú štruktúru:

helloworld
| -stavať.gradle
-src
| -Hlavná
-java
-helloworld
-helloworld.java

Pre helloworld.java vložte kód z príkladu Ant. A pre build.gradle vložte nasledujúci kód:

použiť doplnok: 'java'

verzia= „1,0“

úložiská{
mavenCentral()
}

závislosti{
skupina testCompile: 'junit', názov: 'junit', verzia: „4.12“
}

Na zobrazenie všetkých dostupných príkazov môžete použiť úlohy gradle –all. Gradle automaticky vyberie doplnky, ktoré zadáte v súbore build.gradle, a zobrazí vám ďalšie úlohy, ktoré sú vďaka doplnkom k dispozícii.

Zostavu môžete získať spustením:

$ gradle jar

VYBUDOVANÝ ÚSPEŠNÝ za 1 s
2realizovateľné úlohy:2popravený

Nádobu môžete spustiť takto:

$ java -cp build/libs/helloworld-1,0.jarhelloworld
Ahoj Svet!

Súbor jar je vložený do priečinka build/libs.

Záver

Medzi nástrojmi na vytváranie môže byť Ant užitočný pre menšie projekty, zatiaľ čo Maven je lepší, keď zaistí, aby všetci vývojári dodržiavali rovnaké pravidlá. Gradle je najnovší nástroj, ktorý poskytuje maximálnu flexibilitu.

Referencie: