Velge riktig byggeverktøy: 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 er det tilgjengelige verktøy som er mer passende for byggeautomatisering. De dominerende byggeverktøyene er:
- Apache Ant med Ivy
- Maven
- Gradle
La oss undersøke verktøyene for å finne ut mer.
Apache Ant med Ivy
Apache Ant er et Java-basert kommandolinjeverktøy som bruker XML-filer til å definere build-skript. Den brukes hovedsakelig til Java-bygg, men den kan også brukes til C / C ++ utvikling. Innebygde oppgaver gir måter å kompilere, montere, teste og kjøre programvare på. Brukere kan også lage sine egne "antlibs" for å forbedre funksjonen til Ant. Apache Ivy er et avhengighetsstyringsverktøy som enkelt integreres med Ant for å gi et mer robust økosystem. Utviklingen av Ant startet i 2000.
Fordeler
- Bedre kontroll over den samlede byggeprosessen
- Fleksibel nok til å jobbe med hvilken som helst arbeidsprosess
Ulemper
- XML-baserte build-filer kan vokse seg store og ikke vedlikeholdbare
- Mye tid og ressurser er nødvendig for å opprettholde byggeskriptene
- IDE-integrasjon er vanskelig å oppnå
Maur med eføy eksempel
Du kan installere den nyeste Ant herfra. Du må laste ned glidelåsen, utvide og legge søppelmappen i din vei. Du kan bruke følgende kommando for å se om Ant er riktig installert:
$ ant -versjonApache Ant (TM) versjon 1.10.1 utarbeidet 2. februar 2017
Når du har installert Ant, kan du laste ned den nyeste Ivy jar og sette den i lib-mappen i Ant-katalogen.
Når du har installert Ant, oppretter du mapper helloworld og helloworld / src. Inne i src-mappen, sett helloworld.java-fil med koden:
/ **************************Skriver ut "Hello World!"
*************************** /
offentlig klasse helloworld
public static void main (String [] args)
System.ute.println ("Hello World!");
Nå kan du lage en build i helloworld-mappen.xml-fil med følgende kode:
Og i samme helloworld-mappe, lag eføyen.xml-fil med følgende kode:
Katalogstrukturen skal se slik ut:
Hei Verden| - bygge.xml
| - eføy.xml
'- src
'-- Hei Verden.java
Nå kan du kjøre build med kommandoen:
$ maurkrukkeEn vellykket build skal gi output som dette:
$ maurkrukkeBuildfile: / Brukere / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml
Løse:
[eføy: hente] :: Apache Ivy 2.4.0 - 20141213170938 :: http: // ant.apache.org / eføy / ::
[eføy: hente] :: innstillinger for lasting :: url = jar: fil: / Brukere / zak / BuildTools / ANT / apache
-maur-1.10.1 / lib / eføy-2.4.0.krukke!/ org / apache / eføy / kjerne / innstillinger / ivysettings.xml
[eføy: hente] :: løse avhengigheter :: org.apache # helloworld; [e-postbeskyttet]
MacBook-Air.lokal
[eføy: hente] confs: [standard]
[eføy: hente] funnet junit # junit; 4.12 offentlig
[eføy: hente] funnet org.hamcrest # hamcrest-core; 1.3 offentlig
[eføy: hente] :: oppløsningsrapport :: løse 397ms :: gjenstander dl 15ms
---------------------------------------------------------------------
| | moduler || gjenstander |
| conf | nummer | søk | dwnlded | kastet ut || nummer | dwnlded |
---------------------------------------------------------------------
| standard | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[eføy: hente] :: hente :: org.apache # helloworld
[eføy: hente] confs: [standard]
[eføy: hente] 0 gjenstander kopiert, 4 allerede hentet (0kB / 39ms)
kompilere:
[mkdir] Laget dir: / Brukere / zak / _work / LearnBuildScripts / LearnANT / helloworld / build /
klasser
[javac] / Brukere / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml: 22: advarsel:
'Inkludert truntid' ble ikke angitt, og standardinnstillingen var å bygge.sysclasspath = siste; satt til falsk
for repeterbare bygninger
[javac] Kompilering av 1 kildefil til / Brukere / zak / _work / LearnBuildScripts / LearnANT /
helloworld / build / klasser
krukke:
[mkdir] Laget dir: / Brukere / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin
[jar] Byggkrukke: / Brukere / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin /
Hei Verden.krukke
BYGG SUCCESFULLT
Total tid: 6 sekunder
Du kan prøve jar-filen slik:
$ java -cp build / bin / helloworld.jar helloworldHei Verden!
Vi har definert jar-filen som skal legges i build / bin-mappen. Mappene blir opprettet under byggingen. Ant jar-kommandoen kaller glassmålet i bygningen.xml.
Maven
Maven ble utviklet for å løse problemene med Ant-basert skripting. Det beholdt XML-filene, men tok en annen tilnærming til organisasjonen. I Ant må utviklere lage alle oppgavene. Maven reduserer opprettelsen av oppgaver ved å implementere sterkere standarder for å organisere kode. Som et resultat er det lettere å komme i gang med standardprosjekter.
Den introduserte også avhengighetsnedlastinger som gjorde utviklingen enklere. Før introduksjonen av Ivy in Ant måtte brukerne administrere avhengigheter lokalt. Maven adopterte avhengighetsstyringsfilosofien først.
Imidlertid gjør Mavens strenge standarder det vanskelig å skrive tilpassede byggeskripter. Verktøyet er enkelt å jobbe med så lenge prosjektet følger de strenge standardene.
Fordeler
- Automatiske avhengighetsnedlastinger
- Alle avhengigheter registreres automatisk i kildekontrollen 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 biblioteksintegrasjoner
- Ikke bra med flere versjoner av samme avhengighet
Maven Eksempel
Du kan laste ned den nyeste Maven herfra. Du kan sjekke installasjonen slik:
$ mvn --versjonApache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00: 58: 13-07: 00)
Maven hjem: / Brukere / 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 lokalitet: no_US, plattformskoding: UTF-8
OS-navn: "mac os x", versjon: "10.11.6 ", bue:" x86_64 ", familie:" mac "
Opprett en helloworld-mappe og generer et prosjekt med følgende kommando:
$ mvn arketype: generer -DroupId = com.selskapsnavn.helloworld -DartifactId = helloworld-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode = false
Det skal opprette mappestrukturen og generere utdata som ser slik ut:
[INFO] Skanner etter prosjekter ..[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin: 3.0.0: generer (standard-cli)> generer-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: generer (standard-cli) @ frittstående-pom ---
[INFO] Genererer prosjekt i batch-modus
[INFO] ----------------------------------------------------------------------------
[INFO] Bruker følgende parametere for å lage prosjekt fra Old (1.x) Arketype:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Verdi: / Brukere / zak / _work / LearnBuildScripts / LearnMaven
[INFO] Parameter: pakke, Verdi: com.selskapsnavn.Hei Verden
[INFO] Parameter: groupId, Verdi: com.selskapsnavn.Hei Verden
[INFO] Parameter: artifactId, Verdi: helloworld
[INFO] Parameter: packageName, Verdi: com.selskapsnavn.Hei Verden
[INFO] Parameter: versjon, Verdi: 1.0-STILLBILDE
[INFO] -prosjekt opprettet fra Old (1.x) Arketype i dir: / Brukere / zak / _work /
LearnBuildScripts / LearnMaven / helloworld
[INFO] ------------------------------------------------------------------------
[INFO] BYGG SUKSESS
[INFO] ------------------------------------------------------------------------
[INFO] Total tid: 8.602 s
[INFO] Ferdig kl: 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
| '- com
| '-- selskapsnavn
| '-- Hei Verden
| '- App.java
'- test
'- java
'- com
'-- selskapsnavn
'-- Hei Verden
'- AppTest.java
Pom.xml inneholder byggekonfigurasjonene. Inne i pom.xml koden ser slik ut:
_0.xsd ">
Du kan generere jar-filen ved hjelp av følgende kommando:
$ mvn-pakke[INFO] Skanner etter prosjekter ..
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Bygge helloworld 1.0-STILLBILDE
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin: 2.6: ressurser (standardressurser) @ helloworld ---
[ADVARSEL] Bruke plattformkoding (UTF-8 faktisk) for å kopiere filtrerte ressurser, dvs.e.
build er plattformavhengig!
[INFO] hopp over ikke eksisterende resourceDirectory / Brukere / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / main / resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: kompilere (standardkompilering) @ helloworld ---
[INFO] Oppdagede endringer - kompilering av modulen på nytt!
[ADVARSEL] Filkoding er ikke angitt ved bruk av plattformskoding UTF-8, i.e. bygge er
plattformavhengig!
[INFO] Kompilering av 1 kildefil til / Brukere / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / mål / klasser
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (standard-testResources) @
Hei Verden ---
[ADVARSEL] Bruke plattformkoding (UTF-8 faktisk) for å kopiere filtrerte ressurser, dvs.e.
build er plattformavhengig!
[INFO] hopp over ikke eksisterende resourceDirectory / Brukere / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / test / resources
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (standard-testCompile) @ helloworld ---
[INFO] Oppdagede endringer - kompilering av modulen på nytt!
[ADVARSEL] Filkoding er ikke angitt, ved bruk av plattformskoding UTF-8, i.e. bygge er
plattformavhengig!
[INFO] Kompilering av 1 kildefil til / Brukere / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target / test-klasser
[INFO]
[INFO] --- maven-surefire-plugin: 2.12.4: test (standardtest) @ helloworld ---
[INFO] Surefire-rapportkatalog: / Brukere / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target /
surefire-rapporter
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Kjører com.selskapsnavn.Hei Verden.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] Bygningskrukke: / Brukere / zak / _work / LearnBuildScripts / LearnMaven / helloworld / target /
helloworld-1.0-STILLBILDE.krukke
[INFO] ------------------------------------------------------------------------
[INFO] BYGG SUKSESS
[INFO] ------------------------------------------------------------------------
[INFO] Total tid: 5.624 s
[INFO] Ferdig kl: 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-STILLBILDE.jar com.selskapsnavn.Hei Verden.AppHei Verden!
Jar-filen legges i målmappen.
Gradle
Gradle kombinerer kraften til Ant og Maven. Den første versjonen av Gradle ble utgitt i 2012. Det har sett rask adopsjon. Google bruker den for øyeblikket til Android OS.
I stedet for XML bruker Gradle Groovy-språket. Som et resultat er byggeskripter i Gradle lettere å skrive og lese. Først brukte den Ivy til avhengighetsstyring, men den bruker sin egen avhengighetsmotor nå.
Fordeler
- Gir standardisering mens du holder deg fleksibel
- Lett å lese og skrive byggeskripter
- Bedre til å håndtere flere versjoner av avhengigheter
- Kunne håndtere flere programmeringsspråk og teknologier
- Aktivt fellesskap som hjelper til med å utvikle verktøyet
- Gradle DSL (Domain-Specific Language) gjør det enkelt å konfigurere strukturen
- Gradle gir ytelsesforbedringer ved å bruke trinnvis, bygge cache og Gradle Daemon
Ulemper
- IDE-integrasjon er ikke like bra som Maven
Gradleeksempel
Du kan installere Gradle herfra. Når du har satt opp Gradle i din vei, kan du sjekke det ved å:
$ gradle --versjon------------------------------------------------------------
Grad 4.5
------------------------------------------------------------
Byggetid: 2018-01-24 17:04:52 UTC
Revisjon: 77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy: 2.4.12
Ant: Apache Ant (TM) versjon 1.9.9 utarbeidet 2. februar 2017
JVM: 1.8.0_74 (Oracle Corporation 25.74-b02)
OS: Mac OS X 10.11.6 x86_64
Deretter oppretter du følgende katalogstruktur:
Hei Verden| - bygge.gradering
'- src
| - hoved
'- java
'-- Hei Verden
'-- Hei Verden.java
For helloworld.java satte koden fra Ant-eksemplet. Og for bygging.gradere legger inn følgende kode:
bruk plugin: 'java'versjon = '1.0 '
repositories
mavenCentral ()
avhengigheter
testCompile gruppe: 'junit', navn: 'junit', versjon: '4.12 '
Du kan bruke kommandoen “gradle Tasks -all” for å se på alle tilgjengelige kommandoer. Gradle plukker automatisk opp plugins du spesifiserer i build.gradle-fil og viser deg de ekstra oppgavene som er tilgjengelige på grunn av plugins.
Du kan få bygge ved å kjøre:
$ gradle jarBYGG SUCCESFULL om 1s
2 handlingsoppgaver: 2 utført
Du kan kjøre glasset ditt slik:
$ java -cp build / libs / helloworld-1.0.jar helloworldHei Verden!
Jar-filen 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 nyeste verktøyet som gir mest fleksibilitet.
Referanser:
- http: // maur.apache.org /
- http: // maur.apache.org / eføy /
- https: // maven.apache.org /
- https: // gradle.org /
- http: // makble.com / gradle-junit-helloworld-eksempel
- https: // eksempler.javacodegeeks.no / core-java / gradle / gradle-hallo-world-tutorial /
- https: // gradle.org / maven-vs-gradle /
- https: // maven.apache.org / guider / komme i gang / maven-in-five-minutes.html
- https: // stackoverflow.no / spørsmål / 20755437 / java-build-tools-ant-vs-maven
- https: // teknologikonversasjoner.no / 2014/06/18 / build-verktøy /
- https: // www.quora.no / Hva-er-fordelene-og-im-av-Maven-versus-Ant-som-bygningsverktøy-for-Java