Ant vs Maven vs Gradle

Ant Vs Maven Vs Gradle



Under softwareudvikling skal udviklere genopbygge den samme kode igen og igen. De forsøger ofte at bruge bash -scripts eller andre scriptsprog til at automatisere opgaven. Der findes imidlertid byggeværktøjer, der er mere passende til byggeautomatisering. De fremherskende byggeværktøjer er:

Lad os undersøge værktøjerne for at finde ud af mere.







Apache -myre med Ivy

Apache Ant er et Java-baseret kommandolinjeværktøj, der bruger XML-filer til at definere build-scripts. Det bruges overvejende til Java -builds, men det kan også bruges til C/C ++ udvikling. Indbyggede opgaver giver måder at kompilere, samle, teste og køre softwareapplikationer. Brugere kan også oprette deres egne antlibs for at forbedre funktionaliteten af ​​Ant. Apache Ivy er et værktøj til afhængighedsstyring, der let kan integreres med Ant for at give et mere robust økosystem. Udviklingen af ​​Ant startede i 2000.



Fordele



  • Bedre kontrol over den samlede byggeproces
  • Fleksibel nok til at arbejde med enhver arbejdsproces

Ulemper





  • XML -baserede build -filer kan vokse sig store og uholdbare
  • Masser af tid og ressourcer er nødvendige for at vedligeholde build -scripts
  • IDE -integration er vanskelig at opnå

Myre med efeu eksempel

Du kan installere den nyeste Ant fra her . Du skal downloade zip'en, udvide og lægge mappen bin i din sti. Du kan bruge følgende kommando til at se, om Ant er installeret korrekt:

$ ant-version
Apache Ant(TM)version 1.10.1 udarbejdet i februar2 2017

Når du har installeret Ant, kan du downloade den nyeste Ivy jar og lægge den i lib -mappen inde i Ant -biblioteket.



Når du har installeret Ant, skal du oprette mapper helloworld og helloworld/src. Inde i src -mappen skal du lægge helloworld.java -filen med koden:

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

Udskriver 'Hej verden!'

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

offentlig klasseHej Verden{

offentlig statisk ugyldigvigtigste( Snor []args) {
System .ud.println('Hej Verden!');
}

}

Nu i helloworld -mappen skal du oprette en build.xml -fil med følgende kode:

xmlns: vedbend='antlib: org.apache.ivy.ant' navn='Hej Verden' Standard='krukke'>

navn='src.dir' værdi='src'/>
navn='build.dir' værdi='bygge'/>
navn='klasser.dir' værdi='$ {build.dir}/klasser'/>
navn='am.dir' værdi='$ {build.dir} / bin'/>
navn='lib.dir' værdi='lib' />
id='lib.path.id'>
til dig='$ {lib.dir}' />
>

navn='beslutte'>
/>
>

navn='ren'>
til dig='$ {build.dir}'/>
>

navn='udarbejde' afhænger='beslutte'>
til dig='$ {classes.dir}'/>
srcdir='$ {src.dir}' destdir='$ {classes.dir}' klassevej='lib.path.id'/>
>

navn='krukke' afhænger='udarbejde'>
til dig='$ {bin.dir}'/>
destfile='$ {bin.dir}/$ {ant.project.name} .jar' baseret='$ {classes.dir}'/>
>

>

Og i den samme helloworld -mappe skal du oprette filen ivy.xml med følgende kode:

version='2.0'>
organisation='org.apache' modul='Hej Verden'/>
>
org='junit' navn='junit' rev='4.12'/>
>
>

Mappestrukturen skal se sådan ud:

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

Nu kan du køre build'en med kommandoen:

$myrekrukke

En vellykket build skal levere output som dette:

$ myre krukke
Buildfile: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml

beslutte:
[ivy: hent] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy: hent] :: indstillinger for indlæsning :: 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: hente] :: løse afhængigheder :: org.apache#helloworld; [e -mail beskyttet]
MacBook-Air. Lokal
[ivy: retrieve] confs: [standard]
[ivy: retrieve] fundet junit#junit; 4.12 offentligt
[ivy: retrieve] fundet org.hamcrest#hamcrest-core; 1,3 offentligt
[ivy: hente] :: opløsningsrapport :: løse 397 ms :: artefakter dl 15 ms
-------------------------------------------------- -------------------
| | moduler || artefakter |
| conf | nummer | søgning | dwnlded | smidt ud || nummer | dwnlded |
-------------------------------------------------- -------------------
| standard | 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[ivy: hente] :: hente :: org.apache#helloworld
[ivy: retrieve] confs: [standard]
[ivy: hent] 0 kopierede artefakter, 4 allerede hentet (0 kB/39 ms)

udarbejde:
[mkdir] Oprettet dir:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
klasser
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: advarsel:
'inclusiveeantruntime' blev ikke indstillet, som standard var build.sysclasspath = last; indstillet til falsk
til gentagelige bygninger
[javac] Kompilering af 1 kildefil til/Users/zak/_work/LearnBuildScripts/LearnANT/
helloworld/build/klasser

krukke:
[mkdir] Oprettet dir:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[jar] Bygningskrukke:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
helloworld.jar

BYGGET SUCCESFULD
Samlet tid: 6 sekunder

Du kan prøve jar -filen sådan:

$ java -cp build/bin/helloworld.krukkeHej Verden
Hej Verden!

Vi har defineret jar -filen, der skal lægges i build/bin -mappen. Mapperne oprettes under opbygningen. Kommandoen ant jar kalder jar -målet i build.xml.

Maven

Maven blev udviklet til at løse problemerne med Ant-baseret scripting. Det beholdt XML -filerne, men tog en anden tilgang til organisationen. I Ant skal udviklere oprette alle opgaverne. Maven reducerer opgaveoprettelsen ved at implementere stærkere standarder for organisering af kode. Som et resultat er det lettere at komme i gang med standardprojekter.

Det introducerede også afhængighedsdownloads, som gjorde udviklingen lettere. Før introduktionen af ​​Ivy i Ant skulle brugerne håndtere afhængigheder lokalt. Maven vedtog først afhængighedsstyringsfilosofien.

Mavens strenge standarder gør det imidlertid svært at skrive brugerdefinerede buildscripts. Værktøjet er let at arbejde med, så længe projektet følger de strenge standarder.

Fordele

  • Automatisk download af afhængighed
  • Alle afhængigheder registreres automatisk i kildekontrol som en del af Maven -scripts
  • Standardiserer og forenkler byggeprocessen
  • Integreres let med IDE'er og CI/CD -systemer

Ulemper

  • Ikke fleksibel til at oprette tilpassede arbejdsgange
  • Stejl indlæringskurve og processen er vanskelig for begyndere at forstå
  • Tidskrævende at løse byggeproblemer og nye biblioteksintegrationer
  • Ikke godt med flere versioner af den samme afhængighed

Maven eksempel

Du kan downloade den nyeste Maven fra her . Du kan kontrollere installationen sådan:

$ mvn -version
Apache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00:58:13-07: 00)
Maven home: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Java -version: 1.8.0_74, leverandør: Oracle Corporation
Java -hjem: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Indhold/Hjem/jre
Standardindstilling: en_US, platformskodning: UTF-8
OS navn:'mac os x', version:'10 .11,6 ', bue:'x86_64', familie:'mac'

Opret en helloworld -mappe, og generer et projekt med følgende kommando:

$ mvn arketype: generer -DgroupId = com.firmanavn.Hej Verden-DartifactId = helloworld
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =falsk

Det skal oprette mappestrukturen og generere output, der ser sådan ud:

[INFO] Scanning efter projekter ...
[INFO]
[INFO] ---------------------------------------------- -------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ---------------------------------------------- -------------------------
[INFO]
[INFO] >>> maven-archetype-plugin: 3.0.0: generer (standard-cli)> generer-kilder
@ 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: generer (standard-cli) @ standalone-pom ---
[INFO] Generering af projekt i Batch -tilstand
[INFO] ---------------------------------------------- -----------------------------
[INFO] Brug af følgende parametre til oprettelse af projekt fra gammel (1.x) arketype:
maven-archetype-quickstart: 1.0
[INFO] ---------------------------------------------- -----------------------------
[INFO] Parameter: basedir, Value:/Users/zak/_work/LearnBuildScripts/LearnMaven
[INFO] Parameter: pakke, Værdi: com.companyname.helloworld
[INFO] Parameter: groupId, Værdi: com.companyname.helloworld
[INFO] Parameter: artifactId, Værdi: helloworld
[INFO] Parameter: packageName, Value: com.companyname.helloworld
[INFO] Parameter: version, Værdi: 1.0-SNAPSHOT
[INFO] projekt oprettet fra gammel (1.x) arketype i dir:/Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[INFO] ---------------------------------------------- -------------------------
[INFO] BYGGESucces
[INFO] ---------------------------------------------- -------------------------
[INFO] Samlet tid: 8.602 s
[INFO] Færdig: 2018-01-27T00: 05: 37-08: 00
[INFO] Endelig hukommelse: 15M/152M
[INFO] ---------------------------------------------- -------------------------

Mappestrukturen skal se sådan ud:

Hej Verden
|- pom.xml
``- src
|- vigtigste
| ``-java
| ``- med
| ``-- firmanavn
| ``-- Hej Verden
| ``- App.java
``-prøve
``-java
``- med
``-- firmanavn
``-- Hej Verden
``- AppTest.java

Pom.xml indeholder build -konfigurationerne. Inde i pom.xml ser koden sådan ud:

xmlns='http://maven.apache.org/POM/4.0.0' xmlns: xsi='http://www.w3.org/2001/
XMLSchema-forekomst '
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>
>Hej Verden>
>krukke>
>1.0-SNAPSHOT>
>Hej Verden>
>http://maven.apache.org>
>
>
>junit>
>junit>
>3.8.1>
>prøve>
>
>
>

Du kan generere jar -filen ved hjælp af følgende kommando:

$ mvn pakke

[INFO] Scanning efter projekter ...
[INFO]
[INFO] ---------------------------------------------- -------------------------
[INFO] Bygger helloworld 1.0-SNAPSHOT
[INFO] ---------------------------------------------- -------------------------
[INFO]
[INFO] --- maven-resources-plugin: 2.6: resources (default-resources) @ helloworld ---
[ADVARSEL] Brug af platformskodning (UTF-8 faktisk) til at kopiere filtrerede ressourcer, dvs.
build er platformafhængigt!
[INFO] spring over ikke eksisterende ressourceDirectory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: compile (default-compile) @ helloworld ---
[INFO] Ændringer fundet - rekompilering af modulet!
[ADVARSEL] Filkodning er ikke indstillet ved hjælp af platformskodning UTF-8, dvs. build er
platformafhængig!
[INFO] Kompilering af 1 kildefil til/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/target/klasser
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (default-testResources) @
Hej Verden ---
[ADVARSEL] Brug af platformskodning (UTF-8 faktisk) til at kopiere filtrerede ressourcer, dvs.
build er platformafhængigt!
[INFO] spring over ikke eksisterende ressourceDirectory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (standard-testCompile) @ helloworld ---
[INFO] Ændringer fundet - rekompilering af modulet!
[ADVARSEL] Filkodning er ikke indstillet ved hjælp af platformskodning UTF-8, dvs. build er
platformafhængig!
[INFO] Kompilering af 1 kildefil til/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/test-klasser
[INFO]
[INFO] --- maven-surefire-plugin: 2.12.4: test (standardtest) @ helloworld ---
[INFO] Surefire -rapportmappe:/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/
sikkerhedsrapporter

-------------------------------------------------- -----
T E S T S
-------------------------------------------------- -----
Kører com.companyname.helloworld.AppTest
Testkørsel: 1, Fejl: 0, Fejl: 0, Springet over: 0, Forløbet tid: 0,014 sek

Resultater:

Testene kører: 1, fejl: 0, fejl: 0, springes over: 0

[INFO]
[INFO] --- maven-jar-plugin: 2.4: jar (standard-jar) @ helloworld ---
[INFO] Bygningskrukke:/Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
helloworld-1.0-SNAPSHOT.jar
[INFO] ---------------------------------------------- -------------------------
[INFO] BYGGESucces
[INFO] ---------------------------------------------- -------------------------
[INFO] Samlet tid: 5.624 s
[INFO] Færdig: 2018-01-27T00: 11: 10-08: 00
[INFO] Endelig hukommelse: 16M/114M
[INFO] ---------------------------------------------- -------------------------

Du kan køre jar -filen sådan:

$ java -cp target/helloworld-1.0-SNAPSHOT.krukkemed.firmanavn.Hej Verden.App
Hej Verden!

Jar -filen sættes i målmappen.

Gradle

Gradle kombinerer magt fra Ant og Maven. Den første version af Gradle blev udgivet i 2012. Den har oplevet hurtig vedtagelse. Google bruger det i øjeblikket til Android OS.

I stedet for XML bruger Gradle Groovy -sproget. Som et resultat heraf er build -scripts i Gradle lettere at skrive og læse. Det brugte oprindeligt Ivy til afhængighedsstyring, men det bruger sin egen afhængighedsmotor nu.

Fordele

  • Giver standardisering, mens den forbliver fleksibel
  • Let at læse og skrive bygge scripts
  • Bedre til at håndtere flere versioner af afhængigheder
  • Kan håndtere flere programmeringssprog og teknologier
  • Aktivt fællesskab, der hjælper med at udvikle værktøjet
  • Gradle DSL (domænespecifikt sprog) gør det til en enkel konfigurationsstruktur
  • Gradle leverer præstationsforbedringer ved hjælp af trinvis build -cache og Gradle -dæmonen

Ulemper

  • IDE -integration er ikke så god som Maven

Gradle Eksempel

Du kan installere Gradle fra her . Når du har konfigureret Gradle på din sti, kan du kontrollere det ved at:

$ gradle--version

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

Byggetid:2018-01-24 17: 04:52UTC
Revision: 77d0ec90636f43669dc794ca17ef80dd65457bec

Groovy: 2.4.12
Ant: Apache Ant(TM)version 1.9.9 udarbejdet i februar2 2017
JVM: 1.8.0_74(Oracle Corporation25,74-b02)
OS: Mac OS X 10.11.6 x86_64

Opret derefter følgende biblioteksstruktur:

Hej Verden
| -bygge.gradle
``-src
| -vigtigste
``-java
``-Hej Verden
``-Hej Verden.java

For helloworld.java satte koden fra Ant -eksemplet. Og for build.gradle indsættes følgende kode:

anvende plugin: 'java'

version= '1.0'

depoter{
mavenCentral()
}

afhængigheder{
testKompiler gruppe: 'junit', navn: 'junit', version: '4.12'
}

Du kan bruge gradle -opgaver - alle kommandoer til at se på alle tilgængelige kommandoer. Gradle henter automatisk de plugins, du angiver i build.gradle -filen, og viser dig de ekstra opgaver, der er tilgængelige på grund af plugins.

Du kan få bygget ved at køre:

$ gradle krukke

BYGG VELLYKKET i 1s
2handlingsmæssige opgaver:2henrettet

Du kan køre din krukke sådan her:

$ java -cp build/libs/helloworld-1.0.krukkeHej Verden
Hej Verden!

Jar -filen sættes i mappen build/libs.

Konklusion

Blandt byggeværktøjerne kan Ant være nyttig til mindre projekter, mens Maven er bedre til at sikre, at alle udviklere følger de samme regler. Gradle er det nyeste værktøj, der giver størst fleksibilitet.

Referencer: