Ant vs Maven vs Gradle

Ant Vs Maven Vs Gradle



Under programvareutvikling må utviklere bygge den samme koden om og om igjen. De prøver ofte å bruke bash -skript eller andre skriptspråk for å automatisere oppgaven. Imidlertid finnes det byggeverktøy som er mer passende for byggautomatisering. De dominerende byggeverktøyene er:

La oss undersøke verktøyene for å finne ut mer.







Apache maur med Ivy

Apache Ant er et Java-basert kommandolinjeverktøy som bruker XML-filer til å definere byggeskript. Den brukes hovedsakelig til Java -builds, men den kan også brukes til C/C ++ - utvikling. Innebygde oppgaver gir måter å kompilere, montere, teste og kjøre programvare. Brukere kan også lage sine egne antlibs for å forbedre funksjonaliteten til Ant. Apache Ivy er et verktøy for avhengighetsbehandling som enkelt kan integreres med Ant for å gi et mer robust økosystem. Utviklingen av Ant startet i 2000.



Fordeler



  • Bedre kontroll over den generelle byggeprosessen
  • Fleksibel nok til å jobbe med enhver arbeidsprosess

Ulemper





  • XML -baserte byggfiler kan vokse seg store og uholdbare
  • Mye tid og ressurser er nødvendig for å vedlikeholde byggeskriptene
  • IDE -integrasjon er vanskelig å oppnå

Maur med eføy eksempel

Du kan installere den siste Ant fra her . Du må laste ned zip, utvide og sette bin -mappen i banen. Du kan bruke følgende kommando for å se om Ant er riktig installert:

$ maur-versjon
Apache Ant(TM)versjon 1.10.1 kompilert februar2 2017

Når du har installert Ant, kan du laste ned den nyeste Ivy -krukken og legge den i lib -mappen inne i Ant -katalogen.



Etter at du har installert Ant, oppretter du mapper helloworld og helloworld/src. Sett helloworld.java -filen inne i src -mappen med koden:

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

Skriver ut 'Hei verden!'

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

offentlig klasseHei Verden{

offentlig statisk tomromhoved-( String []args) {
System .ute.println('Hei Verden!');
}

}

Lag en build.xml -fil med følgende kode i helloworld -mappen:

xmlns: eføy='antlib: org.apache.ivy.ant' Navn='Hei Verden' misligholde='krukke'>

Navn='src.dir' verdi='src'/>
Navn='build.dir' verdi='bygge'/>
Navn='classes.dir' verdi='$ {build.dir}/klasser'/>
Navn='am.dir' verdi='$ {build.dir} / bin'/>
Navn='lib.dir' verdi='lib' />
id='lib.path.id'>
til deg='$ {lib.dir}' />
>

Navn='Løse'>
/>
>

Navn='ren'>
til deg='$ {build.dir}'/>
>

Navn='kompilere' avhenger='Løse'>
til deg='$ {classes.dir}'/>
srcdir='$ {src.dir}' destdir='$ {classes.dir}' klassevei='lib.path.id'/>
>

Navn='krukke' avhenger='kompilere'>
til deg='$ {bin.dir}'/>
destfile='$ {bin.dir}/$ {ant.project.name} .jar' basedir='$ {classes.dir}'/>
>

>

Og i den samme helloworld -mappen, opprett ivy.xml -filen med følgende kode:

versjon='2.0'>
organisasjon='org.apache' modul='Hei Verden'/>
>
org='junit' Navn='junit' rev='4.12'/>
>
>

Katalogstrukturen skal se slik ut:

Hei Verden
|- build.xml
| - eføy.xml
`- src
`- helloworld.java

Nå kan du kjøre bygningen med kommandoen:

$maurkrukke

En vellykket build bør gi utgang som denne:

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

Løse:
[ivy: retrieve] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy: retrieve] :: lasting settings :: 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] :: løse avhengigheter :: org.apache#helloworld; [e -postbeskyttet]
MacBook-Air. Lokal
[ivy: retrieve] confs: [standard]
[ivy: retrieve] funnet junit#junit; 4.12 offentlig
[ivy: retrieve] fant org.hamcrest#hamcrest-core; 1,3 offentlig
[ivy: retrieve] :: resolusjonsrapport :: løse 397 ms :: artifacts dl 15 ms
-------------------------------------------------- -------------------
| | moduler || artefakter |
| conf | nummer | søk | dwnlded | kastet ut || nummer | dwnlded |
-------------------------------------------------- -------------------
| standard | 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[ivy: retrieve] :: henter :: org.apache#helloworld
[ivy: retrieve] confs: [standard]
[ivy: retrieve] 0 gjenstander kopiert, 4 allerede hentet (0 kB/39 ms)

kompilere:
[mkdir] Opprettet dir:/Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
klasser
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: advarsel:
'includedeantruntime' ble ikke angitt, som standard er build.sysclasspath = last; satt til false
for repeterbare bygg
[javac] Kompilere 1 kildefil til/Users/zak/_work/LearnBuildScripts/LearnANT/
helloworld/build/klasser

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

BYGG SUKSESSFULL
Total tid: 6 sekunder

Du kan prøve jarfilen slik:

$ java -cp build/bin/helloworld.krukkeHei Verden
Hei Verden!

Vi har definert jar -filen som skal settes i build/bin -mappen. Mappene blir opprettet under byggingen. Ant jar -kommandoen kaller jar -målet i build.xml.

Maven

Maven ble utviklet for å løse problemene med ant-basert skripting. Det beholdt XML -filene, men tok en annen tilnærming til organisering. I Ant må utviklere lage alle oppgavene. Maven reduserer opprettelsen av oppgaver ved å implementere sterkere standarder for organisering av kode. Som et resultat er det lettere å komme i gang med standardprosjekter.

Det introduserte også nedlastingsnedlastinger som gjorde utviklingen enklere. Før introduksjonen av Ivy i Ant, måtte brukerne administrere avhengigheter lokalt. Maven vedtok først avhengighetsstyringsfilosofien.

Imidlertid gjør Mavens strenge standarder det vanskelig å skrive skreddersydde byggeskript. Verktøyet er enkelt å jobbe med så lenge prosjektet følger de strenge standardene.

Fordeler

  • Automatisk nedlasting av avhengighet
  • Alle avhengigheter registreres automatisk i kildekontroll som en del av Maven -skriptene
  • Standardiserer og forenkler byggeprosessen
  • Integreres enkelt med IDEer og CI/CD -systemer

Ulemper

  • Ikke fleksibel når det gjelder å lage tilpassede arbeidsflyter
  • Bratt læringskurve og prosessen er vanskelig for nybegynnere å forstå
  • Tidkrevende å løse byggeproblemer og nye bibliotekintegrasjoner
  • Ikke bra med flere versjoner av samme avhengighet

Maven eksempel

Du kan laste ned den nyeste Maven fra her . Du kan sjekke installasjonen slik:

$ mvn -versjon
Apache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00:58:1. 3-07: 00)
Maven home: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Java -versjon: 1.8.0_74, leverandør: Oracle Corporation
Java -hjem: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Innhold/Hjem/jre
Standard språk: en_US, plattformkoding: UTF-8
OS -navn:'mac os x', versjon:'10 .11.6 ', bue:'x86_64', familie:'mac'

Lag en helloworld -mappe og generer et prosjekt med følgende kommando:

$ mvn arketype: generere -DgroupId = com.selskapsnavn.Hei Verden-DartifactId = helloworld
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =falsk

Det skal opprette mappestrukturen og generere utdataene som ser slik ut:

[INFO] Søker etter prosjekter ...
[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ----------------------------------------------- -------------------------
[INFO]
[INFO] >>> maven-archetype-plugin: 3.0.0: generere (standard-cli)> generere-kilder
@ frittstående-pom >>>
[INFO]
[INFO]<<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ frittstående-pom<<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin: 3.0.0: generere (standard-cli) @ standalone-pom ---
[INFO] Genererer prosjekt i batchmodus
[INFO] ----------------------------------------------- -----------------------------
[INFO] Bruke følgende parametere for å lage prosjekt fra gammel (1.x) arketype:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------- -----------------------------
[INFO] Parameter: basedir, Value:/Users/zak/_work/LearnBuildScripts/LearnMaven
[INFO] Parameter: pakke, verdi: com.companyname.helloworld
[INFO] Parameter: groupId, verdi: com.companyname.helloworld
[INFO] Parameter: artifactId, verdi: helloworld
[INFO] Parameter: packageName, Value: com.companyname.helloworld
[INFO] Parameter: versjon, verdi: 1.0-SNAPSHOT
[INFO] prosjekt opprettet fra gammel (1.x) arketype i dir:/Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[INFO] ----------------------------------------------- -------------------------
[INFO] BYGGESUKSESS
[INFO] ----------------------------------------------- -------------------------
[INFO] Total tid: 8.602 s
[INFO] Ferdig: 2018-01-27T00: 05: 37-08: 00
[INFO] Endelig minne: 15M/152M
[INFO] ----------------------------------------------- -------------------------

Mappestrukturen skal se slik ut:

Hei Verden
|- pom.xml
``- src
|- hoved
| ``-java
| ``- med
| ``-- selskapsnavn
| ``-- Hei Verden
| ``- App. Java
``-test
``-java
``- med
``-- selskapsnavn
``-- Hei Verden
``- AppTest.java

Pom.xml inneholder build -konfigurasjonene. Inne i pom.xml ser koden slik ut:

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>
>Hei Verden>
>krukke>
>1.0-SNAPSHOT>
>Hei Verden>
>http://maven.apache.org>
>
>
>junit>
>junit>
>3.8.1>
>test>
>
>
>

Du kan generere jar -filen ved å bruke følgende kommando:

$ mvn pakke

[INFO] Søker etter prosjekter ...
[INFO]
[INFO] ----------------------------------------------- -------------------------
[INFO] Bygge helloworld 1.0-SNAPSHOT
[INFO] ----------------------------------------------- -------------------------
[INFO]
[INFO] --- maven-resources-plugin: 2.6: resources (default-resources) @ helloworld ---
[ADVARSEL] Bruke plattformkoding (UTF-8 faktisk) for å kopiere filtrerte ressurser, dvs.
build er plattformavhengig!
[INFO] hopp over ikke eksisterende ressursDirectory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: compile (default-compile) @ helloworld ---
[INFO] Endringer oppdaget - kompilering av modulen på nytt!
[ADVARSEL] Filkoding er ikke angitt ved bruk av plattformkoding UTF-8, dvs.
plattformavhengig!
[INFO] Kompilere 1 kildefil til/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/target/classes
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (default-testResources) @
Hei Verden ---
[ADVARSEL] Bruke plattformkoding (UTF-8 faktisk) for å kopiere filtrerte ressurser, dvs.
build er plattformavhengig!
[INFO] hopp over ikke eksisterende ressursDirectory/Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (standard-testCompile) @ helloworld ---
[INFO] Endringer oppdaget - kompilering av modulen på nytt!
[ADVARSEL] Filkoding er ikke angitt ved bruk av plattformkoding UTF-8, dvs.
plattformavhengig!
[INFO] Kompilere 1 kildefil til/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin: 2.12.4: test (standardtest) @ helloworld ---
[INFO] Surefire rapportkatalog:/Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/
surefire-rapporter

-------------------------------------------------- -----
T E S T S
-------------------------------------------------- -----
Kjører com.companyname.helloworld.AppTest
Testkjøring: 1, Feil: 0, Feil: 0, Hoppet over: 0, Forløpt tid: 0,014 sek

Resultater:

Testkjøring: 1, Feil: 0, Feil: 0, Hoppet over: 0

[INFO]
[INFO] --- maven-jar-plugin: 2.4: jar (standard-jar) @ helloworld ---
[INFO] Byggekrukke:/Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
helloworld-1.0-SNAPSHOT.jar
[INFO] ----------------------------------------------- -------------------------
[INFO] BYGGESUKSESS
[INFO] ----------------------------------------------- -------------------------
[INFO] Total tid: 5.624 s
[INFO] Ferdig: 2018-01-27T00: 11: 10-08: 00
[INFO] Endelig minne: 16M/114M
[INFO] ----------------------------------------------- -------------------------

Du kan kjøre jar -filen slik:

$ java -cp target/helloworld-1.0-SNAPSHOT.krukkemed.selskapsnavn.Hei Verden.App
Hei Verden!

Krukkefilen legges i målmappen.

Gradle

Gradle kombinerer kraften til Ant og Maven. Den første versjonen av Gradle ble utgitt i 2012. Den har sett rask adopsjon. Google bruker det for øyeblikket til Android OS.

I stedet for XML bruker Gradle Groovy -språket. Som et resultat er byggeskript i Gradle lettere å skrive og lese. Det brukte opprinnelig Ivy for avhengighetsbehandling, men det bruker sin egen avhengighetsmotor nå.

Fordeler

  • Gir standardisering mens du forblir fleksibel
  • Lett å lese og skrive bygge skript
  • Bedre til å håndtere flere versjoner av avhengigheter
  • Kan håndtere flere programmeringsspråk og teknologier
  • Aktivt fellesskap som hjelper til med å utvikle verktøyet
  • Gradle DSL (Domain-Specific Language) gjør det til en enkel konfigurasjonsstruktur
  • Gradle gir ytelsesforbedringer ved å bruke trinnvis bygge cache og Gradle Daemon

Ulemper

  • IDE -integrasjon er ikke like bra som Maven

Gradle eksempel

Du kan installere Gradle fra her . Når du har konfigurert Gradle i stien din, kan du sjekke det ved å:

$ gradle--versjon

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

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

Groovy: 2.4.12
Maur: Apache maur(TM)versjon 1.9.9 kompilert februar2 2017
JVM: 1.8.0_74(Oracle Corporation25,74-b02)
OS: Mac OS X 10.11.6 x86_64

Deretter oppretter du følgende katalogstruktur:

Hei Verden
| -bygge.gradle
``-src
| -hoved-
``-java
``-Hei Verden
``-Hei Verden.java

For helloworld.java, legg koden fra Ant -eksempelet. Og for build.gradle legg inn følgende kode:

bruk plugin: 'java'

versjon= '1.0'

depoter{
mavenCentral()
}

avhengigheter{
testKompiler gruppe: 'junit', Navn: 'junit', versjon: '4.12'
}

Du kan bruke gradle -oppgaver - alle kommandoer for å se på alle tilgjengelige kommandoer. Gradle henter automatisk pluginene du angir i build.gradle -filen og viser deg de ekstra oppgavene som er tilgjengelige på grunn av plugins.

Du kan få bygget ved å kjøre:

$ gradle krukke

BYGGE VELLYKKET på 1s
2handlingsrike oppgaver:2henrettet

Du kan kjøre glasset ditt slik:

$ java -cp build/libs/helloworld-1.0.krukkeHei Verden
Hei Verden!

Krukkefilen legges i build/libs -mappen.

Konklusjon

Blant byggeverktøyene kan Ant være nyttig for mindre prosjekter mens Maven er bedre for å sikre at alle utviklere følger de samme reglene. Gradle er det siste verktøyet som gir mest fleksibilitet.

Referanser: