Ant vs Maven vs Gradle

Ant Vs Maven Vs Gradle



În timpul dezvoltării software, dezvoltatorii trebuie să reconstruiască același cod din nou și din nou. Încearcă adesea să utilizeze scripturi bash sau alte limbaje de scriptare pentru a automatiza sarcina. Cu toate acestea, există instrumente de construcție disponibile care sunt mai potrivite pentru automatizarea construcțiilor. Instrumentele de construcție predominante sunt:

Să investigăm instrumentele pentru a afla mai multe.







Ant Apache cu Ivy

Apache Ant este un instrument de linie de comandă bazat pe Java care folosește fișiere XML pentru a defini scripturi de construire. Este utilizat în principal pentru versiunile Java, dar poate fi utilizat și pentru dezvoltarea C / C ++. Sarcinile încorporate oferă modalități de a compila, asambla, testa și rula aplicații software. Utilizatorii își pot crea propriile lor antlib-uri pentru a îmbunătăți funcționalitatea Ant. Apache Ivy este un instrument de gestionare a dependenței care se integrează ușor cu Ant pentru a oferi un ecosistem mai robust. Dezvoltarea Ant a început în 2000.



Pro



  • Un control mai bun asupra procesului general de construire
  • Suficient de flexibil pentru a lucra cu orice proces de lucru

Contra





  • Fișierele de construcție bazate pe XML pot crește și nu pot fi întreținute
  • Este nevoie de mult timp și resurse pentru a menține scripturile de construire
  • Integrarea IDE este dificil de realizat

Furnica cu Iedera Exemplu

Puteți instala cea mai recentă furnică de la Aici . Trebuie să descărcați fișierul zip, să extindeți și să puneți folderul bin în calea dvs. Puteți utiliza următoarea comandă pentru a vedea dacă Ant este instalat corect:

$ furnică-versiune
Ant Apache(TM)versiunea 1.10.1 compilată în februarie2 2017.

După ce ați instalat Ant, puteți descărca cel mai recent borcan Ivy și îl puteți pune în folderul lib din directorul Ant.



După ce ați instalat Ant, creați foldere helloworld și helloworld / src. În folderul src, puneți fișierul helloworld.java cu codul:

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

Tipărește „Hello World!”

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

public clasăSalut Lume{

public static nulprincipal( Şir []argumente) {
Sistem .afară.println('Salut Lume!');
}

}

Acum, în folderul helloworld, creați un fișier build.xml cu următorul cod:

xmlns: iederă=„antlib: org.apache.ivy.ant” Nume='Salut Lume' Mod implicit='borcan'>

Nume=„src.dir” valoare=„src”/>
Nume=„build.dir” valoare='construi'/>
Nume=„classes.dir” valoare=„$ {build.dir} / clase”/>
Nume=„am.dir” valoare=„$ {build.dir} / bin”/>
Nume=„lib.dir” valoare=„lib” />
id=„lib.path.id”>
pentru tine=„$ {lib.dir}” />
>

Nume='rezolva'>
/>
>

Nume='curat'>
pentru tine=„$ {build.dir}”/>
>

Nume='compila' depinde='rezolva'>
pentru tine=„$ {classes.dir}”/>
srcdir=„$ {src.dir}” destdir=„$ {classes.dir}” classpathref=„lib.path.id”/>
>

Nume='borcan' depinde='compila'>
pentru tine=„$ {bin.dir}”/>
destfile='$ {bin.dir} / $ {ant.project.name} .jar' basedir=„$ {classes.dir}”/>
>

>

Și în același folder helloworld, creați fișierul ivy.xml cu următorul cod:

versiune=„2.0”>
organizare=„org.apache” modul='Salut Lume'/>
>
org=„junit” Nume=„junit” rev=„4.12”/>
>
>

Structura directorului ar trebui să arate astfel:

Salut Lume
| - build.xml
| - iederă.xml
`- src
`- helloworld.java

Acum puteți rula construirea cu comanda:

$furnicăborcan

O construcție de succes ar trebui să ofere rezultate de acest gen:

$ ant jar
Buildfile: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml

rezolva:
[iederă: recuperare] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy: retrieve] :: încărcare setări :: url = jar: file: / Users / zak / BuildTools / ANT / apache
-ant-1.10.1 / lib / ivy-2.4.0.jar! /org/apache/ivy/core/settings/ivysettings.xml
[ivy: retrieve] :: rezolvarea dependențelor :: org.apache # helloworld; [e-mail protejat]
MacBook-Air.local
[ivy: retrieve] confs: [implicit]
[ivy: retrieve] a găsit junit # junit; 4.12 în public
[ivy: retrieve] a găsit org.hamcrest # hamcrest-core; 1.3 în public
[iederă: recuperare] :: raport de rezoluție :: rezolvă 397 ms :: artefacte dl 15 ms
-------------------------------------------------- -------------------
| | module || artefacte |
| conf | număr | căutare | dwnlded | evacuat || număr | dwnlded |
-------------------------------------------------- -------------------
| implicit | 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[iederă: recuperare] :: recuperare :: org.apache # helloworld
[ivy: retrieve] confs: [implicit]
[iederă: recuperare] 0 artefacte copiate, 4 deja recuperate (0kB / 39ms)

compila:
[mkdir] Creat director: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build /
clase
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: avertisment:
'includeantruntime' nu a fost setat, implicit pentru build.sysclasspath = last; setat la fals
pentru versiunile repetabile
[javac] Compilarea unui fișier sursă în / Users / zak / _work / LearnBuildScripts / LearnANT /
helloworld / build / classes

borcan:
[mkdir] Creat director: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin
[jar] Building jar: / Users / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin /
helloworld.jar

CONSTRUIȚI SUCCES
Timp total: 6 secunde

Puteți încerca fișierul jar astfel:

$ java -cp build / bin / helloworld.borcanSalut Lume
Salut Lume!

Am definit fișierul jar care trebuie pus în folderul build / bin. Folderele sunt create în timpul construirii. Comanda ant jar apelează ținta jar din build.xml.

Maven

Maven a fost dezvoltat pentru a rezolva problemele cu care se confruntă scripturile bazate pe Ant. A păstrat fișierele XML, dar a adoptat o abordare diferită a organizării. În Ant, dezvoltatorii trebuie să creeze toate sarcinile. Maven scade crearea sarcinilor prin implementarea unor standarde mai puternice pentru organizarea codului. Prin urmare, este mai ușor să începeți proiectele standard.

De asemenea, a introdus descărcări de dependență care au facilitat dezvoltarea. Înainte de introducerea Ivy în Ant, utilizatorii trebuiau să gestioneze dependențele la nivel local. Maven a adoptat mai întâi filosofia managementului dependenței.

Cu toate acestea, standardele stricte ale Mavens fac dificilă scrierea de scripturi de construcție personalizate. Instrumentul este ușor de utilizat cu condiția ca proiectul să respecte standardele stricte.

Pro

  • Descărcări automate de dependență
  • Toate dependențele sunt înregistrate automat în controlul sursei ca parte a scripturilor Maven
  • Standardizează și simplifică procesul de construire
  • Se integrează cu ușurință cu sistemele IDE și CI / CD

Contra

  • Nu este flexibil în crearea de fluxuri de lucru personalizate
  • Curba de învățare abruptă și procesul este dificil de înțeles pentru începători
  • Consumatoare de timp pentru rezolvarea problemelor de construcție și a noilor integrări de bibliotecă
  • Nu este bine cu mai multe versiuni ale aceleiași dependențe

Exemplu Maven

Puteți descărca cel mai recent Maven de pe Aici . Puteți verifica instalarea astfel:

$ mvn --versiune
Apache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017.-10-18T00:58:13-07: 00)
Maven acasă: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Versiune Java: 1.8.0_74, furnizor: Oracle Corporation
Acasă Java: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/ Cuprins / Acasă / jre
Setări locale implicite: en_US, codificare platformă: UTF-8
Numele sistemului de operare:'Mac OS X', versiune:„10 .11.6”, arc:„x86_64”, familie:'Mac'

Creați un folder helloworld și generați un proiect cu următoarea comandă:

$ mvn arhetip: generate -DgroupId = com.Numele Companiei.Salut Lume-DartifactId = helloworld
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =fals

Ar trebui să creeze structura de dosare și să genereze ieșirea care arată astfel:

[INFO] Se caută proiecte ...
[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Construirea proiectului Maven Stub (fără 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] Generarea proiectului în modul Batch
[INFO] ----------------------------------------------- -----------------------------
[INFO] Utilizarea următorilor parametri pentru crearea proiectului din arhetipul vechi (1.x):
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------- -----------------------------
[INFO] Parametru: basedir, Value: / Users / zak / _work / LearnBuildScripts / LearnMaven
[INFO] Parametru: pachet, Valoare: com.comname companie.helloworld
[INFO] Parametru: groupId, Value: com.companyname.helloworld
[INFO] Parametru: artifactId, Valoare: helloworld
[INFO] Parametru: packageName, Value: com.companyname.helloworld
[INFO] Parametru: versiune, Valoare: 1.0-SNAPSHOT
Proiect [INFO] creat din vechiul (1.x) arhetip în dir: / Users / zak / _work /
LearnBuildScripts / LearnMaven / helloworld
[INFO] ----------------------------------------------- -------------------------
[INFO] CONSTRUI SUCCES
[INFO] ----------------------------------------------- -------------------------
[INFO] Timp total: 8.602 s
[INFO] Finalizat la: 2018-01-27T00: 05: 37-08: 00
[INFO] Memorie finală: 15M / 152M
[INFO] ----------------------------------------------- -------------------------

Structura folderelor ar trebui să arate astfel:

Salut Lume
|- pom.xml
- src
|- principal
| -java
| -- cu
| -- Numele Companiei
| -- Salut Lume
| - App.java
-Test
-java
-- cu
-- Numele Companiei
-- Salut Lume
- AppTest.java

Pom.xml conține configurațiile de construire. În interiorul pom.xml, codul arată astfel:

xmlns=„http://maven.apache.org/POM/4.0.0” xmlns: xsi=„http://www.w3.org/2001/
XMLSchema-instance '
xsi: schemaLocation=„http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd '>
>4.0.0>
>com.comname companie.helloworld>
>Salut Lume>
>borcan>
>1.0-SNAPSHOT>
>Salut Lume>
>http://maven.apache.org>
>
>
>junit>
>junit>
>3.8.1>
>Test>
>
>
>

Puteți genera fișierul jar utilizând următoarea comandă:

pachet $ mvn

[INFO] Se caută proiecte ...
[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Construirea helloworld 1.0-SNAPSHOT
[INFO] ----------------------------------------------- -------------------------
[INFO]
[INFO] --- maven-resources-plugin: 2.6: resurse (default-resources) @ helloworld ---
[AVERTISMENT] Utilizarea codificării platformei (UTF-8 de fapt) pentru a copia resursele filtrate, adică
construirea depinde de platformă!
[INFO] sări peste directorul de resurse inexistent / Utilizatori / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / main / resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: compile (implicit-compile) @ helloworld ---
[INFO] Modificări detectate - recompilarea modulului!
[AVERTISMENT] Codificarea fișierului nu a fost setată, utilizând codificarea platformei UTF-8, adică build este
platformă dependentă!
[INFO] Compilarea unui fișier sursă în / Users / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / target / classes
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (implicit-testResources) @
Salut Lume ---
[AVERTISMENT] Utilizarea codificării platformei (UTF-8 de fapt) pentru a copia resursele filtrate, adică
construirea depinde de platformă!
[INFO] sări peste directorul de resurse inexistent / Utilizatori / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / test / resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (implicit-testCompile) @ helloworld ---
[INFO] Modificări detectate - recompilarea modulului!
[AVERTISMENT] Codificarea fișierului nu a fost setată, utilizând codificarea platformei UTF-8, adică build este
platformă dependentă!
[INFO] Compilarea unui fișier sursă în / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target / test-classes
[INFO]
[INFO] --- maven-surefire-plugin: 2.12.4: test (test implicit) @ helloworld ---
[INFO] Director de rapoarte Surefire: / Users / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target /
rapoarte sigure

-------------------------------------------------- -----
T E S T S
-------------------------------------------------- -----
Rulează com.companyname.helloworld.AppTest
Teste executate: 1, Eșecuri: 0, Erori: 0, Omis: 0, Timp scurs: 0.014 sec

Rezultate:

Teste executate: 1, Eșecuri: 0, Erori: 0, Omis: 0

[INFO]
[INFO] --- maven-jar-plugin: 2.4: jar (implicit-jar) @ helloworld ---
[INFO] Clădire jar: / Users / zak / _work / LearnBuildScripts / LearnMaven / helloworld / target /
helloworld-1.0-SNAPSHOT.jar
[INFO] ----------------------------------------------- -------------------------
[INFO] CONSTRUI SUCCES
[INFO] ----------------------------------------------- -------------------------
[INFO] Timp total: 5.624 s
[INFO] Finalizat la: 2018-01-27T00: 11: 10-08: 00
[INFO] Memorie finală: 16M / 114M
[INFO] ----------------------------------------------- -------------------------

Puteți rula fișierul jar astfel:

$ java -cp target / helloworld-1.0-INSTANTANEU.borcancu.Numele Companiei.Salut Lume.Aplicație
Salut Lume!

Fișierul jar este plasat în folderul țintă.

Gradle

Gradle combină puterea Ant și Maven. Prima versiune a lui Gradle a fost lansată în 2012. A fost adoptată rapid. Google îl folosește în prezent pentru sistemul de operare Android.

În loc de XML, Gradle folosește limbajul Groovy. Drept urmare, scripturile de construire din Gradle sunt mai ușor de scris și de citit. Inițial folosea Ivy pentru gestionarea dependenței, dar folosește propriul motor de dependență acum.

Pro

  • Oferă standardizare în timp ce rămâneți flexibil
  • Scripturi de construcție ușor de citit și de scris
  • Mai bine la gestionarea mai multor versiuni de dependențe
  • Capabil să gestioneze mai multe limbaje și tehnologii de programare
  • Comunitate activă care ajută la dezvoltarea instrumentului
  • Gradle DSL (Domain-Specific Language) îl face o structură simplă de configurare
  • Gradle oferă îmbunătățiri ale performanței utilizând în mod incremental, construiți memoria cache și Gradle Daemon

Contra

  • Integrarea IDE nu este la fel de bună ca Maven

Exemplu Gradle

Puteți instala Gradle de la Aici . Odată ce ați configurat Gradle în calea dvs., îl puteți verifica prin:

$ gradle--versiune

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

Timp de construire:2018-01-24 17: 04:52UTC
Revizuire: 77d0ec90636f43669dc794ca17ef80dd65457bec

Groovy: 2.4.12
Furnică: Apache Ant(TM)versiunea 1.9.9 compilată în februarie2 2017.
JVM: 1.8.0_74(Oracle Corporation25,74-b02)
Sistem de operare: Mac OS X 10.11.6 x86_64

Apoi, creați următoarea structură de directoare:

Salut Lume
| -construi.gradle
-src
| -principal
-java
-Salut Lume
-Salut Lume.java

Pentru helloworld.java puneți codul din exemplul Ant. Și pentru build.gradle introduceți următorul cod:

aplicați pluginul: „java”

versiune= „1.0”

depozite{
mavenCentral()
}

dependențe{
testCompilați grupul: „junit”, Nume: „junit”, versiune: „4.12”
}

Puteți utiliza sarcini gradle - toate comenzile pentru a vedea toate comenzile disponibile. Gradle preia automat pluginurile pe care le specificați în fișierul build.gradle și vă arată sarcinile suplimentare disponibile datorită pluginurilor.

Puteți obține versiunea executând:

$ gradle jar

CONSTRUI DE SUCCES în 1s
2sarcini acționabile:2executat

Puteți rula borcanul astfel:

$ java -cp build / libs / helloworld-1.0.borcanSalut Lume
Salut Lume!

Fișierul jar este introdus în folderul build / libs.

Concluzie

Printre instrumentele de construcție, Ant poate fi utilă pentru proiecte mai mici, în timp ce Maven este mai bun pentru a se asigura că toți dezvoltatorii respectă aceleași reguli. Gradle este cel mai recent instrument care oferă cea mai mare flexibilitate.

Referințe: