Velge riktig byggeverktøy: ANT vs Maven vs Gradle
Under programvareutvikling må utviklere gjenoppbygge den samme koden om og om igjen. De prøver ofte å bruke bashskript eller andre skriptspråk for å automatisere oppgaven. Imidlertid er det tilgjengelige byggverktøy som er mer passende for byggautomatisering. De dominerende byggeverktøyene er:
- Apache Ant med eføy
- Maven
- Gradle
La oss undersøke verktøyene for å finne ut mer.
Apache Ant med eføy
Apache Ant er et Java-basert kommandolinjeverktøy som bruker XML-filer for å definere build-skript. Det er hovedsakelig brukt til Java Builds, men det kan også brukes til C/C ++ utvikling. Innebygde oppgaver gir måter å samle, montere, teste og kjøre programvareapplikasjoner. Brukere kan også lage sine egne "antlibs" for å forbedre funksjonaliteten til ANT. Apache Ivy er et avhengighetsstyringsverktøy som integreres enkelt med ANT for å gi et mer robust økosystem. Utviklingen av maur startet i 2000.
Fordeler
- Bedre kontroll over den samlede byggeprosessen
- Fleksibel nok til å jobbe med enhver arbeidsprosess
Ulemper
- XML -baserte byggefiler kan bli store og uminnelige
- Mye tid og ressurser er nødvendige for å opprettholde byggeskriptene
- IDE -integrasjon er vanskelig å oppnå
Maur med eføyeksemplet
Du kan installere den siste mauren herfra. Du må laste ned ZIP, utvide og sette søppelmappen i banen din. Du kan bruke følgende kommando for å se om Ant er installert riktig:
$ Ant -Versjon
Apache Ant (TM) versjon 1.10.1 samlet 2. februar 2017
Når du har installert Ant, kan du laste ned den nyeste Ivy Jar og legge den i Lib -mappen i Ant Directory.
Etter at du har installert maur, lag mapper helloworld og helloworld/src. Inne i SRC -mappen, legg Helloworld.Java -fil med koden:
/*************************
Skriver ut "Hello World!""
***************************/
offentlig klasse HelloWorld
public static void main (String [] args)
System.ute.Println ("Hello World!");
Nå i Helloworld -mappen opprette en build.XML -fil med følgende kode:
Og i den samme helloworld -mappen, lag Ivy.XML -fil med følgende kode:
Katalogstrukturen skal se slik ut:
Hei Verden
|- Bygg.XML
|- eføy.XML
'- Src
'-- Hei Verden.Java
Nå kan du kjøre bygningen med kommandoen:
$ maurkrukke
En vellykket bygning bør gi output som dette:
$ maurkrukke
BuildFile:/Brukere/ZAK/_Work/LearnBuildScripts/Learnant/Helloworld/Build.XML
Løse:
[Ivy: Hent] :: Apache Ivy 2.4.0 - 20141213170938 :: http: // ant.Apache.org/ eføy/ ::
[Ivy: Hent] :: Lasting Innstillinger :: URL = Jar: Fil:/Brukere/Zak/BuildTools/ANT/Apache
-Ant-1.10.1/lib/Ivy-2.4.0.krukke!/org/apache/eføy/kjerne/innstillinger/ivysettings.XML
[Ivy: Hent] :: Løsningsavhengigheter :: Org.Apache#Helloworld; Working@Zakirs-
MacBook-Air.lokal
[Ivy: Hent] Confs: [Standard]
[Ivy: Hent] Fant Junit#Junit; 4.12 offentlig
[eføy: hente] funnet org.Hamcrest#Hamcrest-core; 1.3 i offentligheten
[Ivy: Hent] :: Oppløsningsrapport :: Løs 397MS :: Artifacts DL 15ms
---------------------------------------------------------------------
| | moduler || gjenstander |
| Conf | nummer | Søk | dwnlded | Utkastet || nummer | dwnlded |
---------------------------------------------------------------------
| standard | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[eføy: hente] :: henting :: org.Apache#Helloworld
[Ivy: Hent] Confs: [Standard]
[eføy: hente] 0 gjenstander kopiert, 4 allerede hentet (0kb/39ms)
kompilere:
[mkdir] opprettet dir:/brukere/zak/_work/learnbuildscripts/learning/helloworld/build/
klasser
[Javac]/Brukere/ZAK/_Work/LearnBuildScripts/Learnant/Helloworld/Build.XML: 22: Advarsel:
'Includeantruntime'was ikke satt, misligholdt å bygge.SysClassPath = sist; satt til falsk
for repeterbare bygg
[Javac] Samarbeid 1 kildefil til/brukere/zak/_work/learnbuildscripts/lærere/
Helloworld/build/klasser
krukke:
[mkdir] opprettet dir:/brukere/zak/_work/learnbuildscripts/learnant/helloworld/build/bin
[krukke] Building Jar:/Brukere/ZAK/_Work/LearnBuildScripts/Learning/Helloworld/build/bin/
Hei Verden.krukke
Bygg vellykket
Total tid: 6 sekunder
Du kan prøve ut JAR -filen slik:
$ java -cp build/bin/helloworld.Jar Helloworld
Hei Verden!
Vi har definert JAR -filen som skal legges i Build/Bin -mappen. Mappene blir opprettet under byggingen. Ant JAR -kommandoen kaller krukke -målet i byggingen.XML.
Maven
Maven ble utviklet for å løse problemene med myrbasert skripting. Det holdt XML -filene, men tok en annen tilnærming til organisasjonen. I maur må utviklere lage alle oppgavene. Maven reduserer oppgaveopprettelsen ved å implementere sterkere standarder for organisering av kode. Som et resultat er det lettere å komme i gang med standardprosjekter.
Det introduserte også nedlastinger av avhengigheter som gjorde utviklingen enklere. Før introduksjonen av eføy i Ant, måtte brukere administrere avhengigheter lokalt. Maven vedtok Filosofi fra avhengighetsledelse først.
Imidlertid gjør mavens strenge standarder det vanskelig å skrive tilpassede byggeskript. Verktøyet er enkelt å jobbe med så lenge prosjektet følger de strenge standardene.
Fordeler
- Nedlastinger av automatisk avhengighet
- Alle avhengigheter blir automatisk registrert i kildekontroll som en del av Maven -skriptene
- Standardiserer og forenkler byggeprosessen
- Integreres enkelt med IDE -er og CI/CD -systemer
Ulemper
- Ikke fleksibel i å lage tilpassede arbeidsflyter
- Bratt læringskurve og prosessen er vanskelig for nybegynnere å forstå
- Tidkrevende for å løse byggproblemer og nye bibliotekintegrasjoner
- Ikke bra med flere versjoner av samme avhengighet
Maven eksempel
Du kan laste ned den siste Maven herfra. Du kan sjekke installasjonen slik:
$ MVN -Versjon
Apache Maven 3.5.2 (138Edd61fd100EC658BFA2D307C43B76940A5D7D; 2017-10-18T00: 58: 13-07: 00)
Maven Home:/Brukere/Zak/Buildtools/Maven/Apache-Maven-3.5.2
Java versjon: 1.8.0_74, leverandør: Oracle Corporation
Java Home:/Library/Java/JavavirtualMachines/JDK1.8.0_74.JDK/Innhold/Hjem/JRE
Standard lokalisering: EN_US, plattformkoding: UTF-8
OS Navn: "Mac OS X", versjon: "10.11.6 ", Arch:" X86_64 ", familie:" Mac "
Lag en Helloworld -mappe og generer et prosjekt med følgende kommando:
$ MVN arketype: generere -dgroupid = com.selskapsnavn.HelloWorld -DartifactId = Helloworld
-DarChetypeArtIfactId = Maven-Arcetype-QuickStart -Dinteractivemode = FALSE
Den skal lage mappestrukturen og generere utgangen som ser slik ut:
[Info] Skanning 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
@ standalone-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] Generere prosjekt i batchmodus
[Info] ----------------------------------------------------------------------------
[Info] Bruke følgende parametere for å lage prosjekt fra gammelt (1.x) Arketype:
Maven-Archetype-Quickstart: 1.0
[Info] ----------------------------------------------------------------------------
[Info] Parameter: Basertir, verdi:/Brukere/ZAK/_Work/LearnBuildScripts/LearnMaven
[Info] Parameter: Pakke, verdi: com.selskapsnavn.Hei Verden
[Info] Parameter: GroupID, verdi: com.selskapsnavn.Hei Verden
[Info] Parameter: Artefaktid, verdi: Helloworld
[Info] Parameter: packagename, verdi: com.selskapsnavn.Hei Verden
[Info] Parameter: versjon, verdi: 1.0-SNAPSHOT
[Info] prosjekt opprettet fra gammelt (1.x) arketype i dir:/brukere/zak/_arbeid/
LearnBuildScripts/LearnMaven/Helloworld
[Info] ------------------------------------------------------------------------
[Info] Bygg suksess
[Info] ------------------------------------------------------------------------
[Info] Total tid: 8.602 s
[Info] Ferdig på: 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:
XSI: schemalocation = "http: // maven.Apache.org/pom/4.0.0 http: // maven.Apache.org/maven-v4_0
_0.XSD ">
4.0.0
com.selskapsnavn.Hei Verden
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] Skanning etter prosjekter ..
[Info]
[Info] ------------------------------------------------------------------------
[Info] Building Helloworld 1.0-SNAPSHOT
[Info] ------------------------------------------------------------------------
[Info]
[Info] --- Maven-resource-plugin: 2.6: Ressurser (standard-ressurser) @ Helloworld ---
[Advarsel] Bruke plattformkoding (UTF-8 faktisk) for å kopiere filtrerte ressurser, i.e.
Bygg 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 (standardkompil) @ helloworld ---
[Info] Endringer oppdaget - Omkompilering av modulen!
[Advarsel] Filkoding er ikke satt, ved hjelp av plattformkoding av UTF-8, i.e. Bygg er
plattformavhengig!
[Info] Samarbeid 1 kildefil til/brukere/zak/_work/learnbuildscripts/learnmaven/
Helloworld/mål/klasser
[Info]
[Info] --- Maven-resource-plugin: 2.6: TestResources (standard-testresources) @
Hei Verden ---
[Advarsel] Bruke plattformkoding (UTF-8 faktisk) for å kopiere filtrerte ressurser, i.e.
Bygg 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] Endringer oppdaget - Omkompilering av modulen!
[Advarsel] Filkoding er ikke satt, ved hjelp av plattformkoding av UTF-8, i.e. Bygg er
plattformavhengig!
[Info] Samarbeid 1 kildefil til/brukere/zak/_work/learnbuildscripts/learnmaven
/helloworld/mål/testklasse
[Info]
[Info] --- Maven-Surefire-Plugin: 2.12.4: test (standardtest) @ helloworld ---
[Info] Surefire Report Directory:/Brukere/ZAK/_Work/LearnBuildScripts/LearnMaven
/helloworld/mål/
Surefire-rapporter
-------------------------------------------------------
T e s t s
-------------------------------------------------------
Kjører com.selskapsnavn.Hei Verden.AppTest
Tester kjøres: 1, feil: 0, feil: 0, hoppet over: 0, tid går: 0.014 sek
Resultater:
Tester kjøres: 1, feil: 0, feil: 0, hoppet over: 0
[Info]
[Info] --- Maven-Jar-Plugin: 2.4: krukke (standard-jar) @ helloworld ---
[Info] Building Jar:/Brukere/ZAK/_Work/LearnBuildScripts/LearnMaven/Helloworld/Target/
Helloworld-1.0-SNAPSHOT.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-SNAPSHOT.krukke com.selskapsnavn.Hei Verden.App
Hei Verden!
JAR -filen settes i målmappen.
Gradle
Gradle kombinerer myrens kraft og maven. Den første versjonen av Gradle ble utgitt i 2012. Det har sett rask adopsjon. Google bruker for tiden for Android OS.
I stedet for XML bruker Gradle det groovy språket. Som et resultat er byggskript i Gradle lettere å skrive og lese. Den brukte opprinnelig eføy for avhengighetsstyring, men den bruker sin egen avhengighetsmotor nå.
Fordeler
- Gir standardisering mens du holder deg fleksibel
- Lett å lese og skrive build manus
- Bedre til å håndtere flere versjoner av avhengigheter
- I stand til å håndtere flere programmeringsspråk og teknologier
- Aktivt samfunn som hjelper til med å utvikle verktøyet
- Gradle DSL (domenespesifikt språk) gjør det til enkel konfigurasjonsstruktur
- Gradle gir ytelsesforbedringer ved bruk av trinnvis, bygg cache og gradle -demonet
Ulemper
- IDE -integrasjon ikke så bra som Maven
Gradle -eksempel
Du kan installere Gradle herfra. Når du har satt opp Gradle i din vei, kan du sjekke den med:
$ Gradle -Versjon
------------------------------------------------------------
Gradle 4.5
------------------------------------------------------------
Bygg tid: 2018-01-24 17:04:52 UTC
Revisjon: 77D0EC90636F43669DC794CA17EF80DD65457BEC
Groovy: 2.4.12
Maur: Apache Ant (TM) versjon 1.9.9 samlet 2. februar 2017
JVM: 1.8.0_74 (Oracle Corporation 25.74-B02)
OS: Mac OS x 10.11.6 x86_64
Neste, lag følgende katalogstruktur:
Hei Verden
|- Bygg.gradle
'- Src
|- Hoved
'- Java
'-- Hei Verden
'-- Hei Verden.Java
For Helloworld.Java satte koden fra maureksemplet. Og for bygg.Graden lagt inn følgende kode:
Bruk plugin: 'Java'
versjon = '1.0 '
depoter
mavencentral ()
avhengigheter
TestCompile Group: 'Junit', navn: 'Junit', versjon: '4.12 '
Du kan bruke “Gradle Tasks -Ald” -kommando for å se på alle tilgjengelige kommandoer. Gradle henter automatisk plugins du spesifiserer i byggingen.Gradle -filen og viser deg de ekstra oppgavene som er tilgjengelige på grunn av plugins.
Du kan få byggingen ved å løpe:
$ Gradle Jar
Bygg vellykket i 1s
2 Handlingsoppgaver: 2 utført
Du kan kjøre krukken din slik:
$ java -cp build/libs/helloworld -1.0.Jar Helloworld
Hei Verden!
JAR -filen settes i Build/LIBS -mappen.
Konklusjon
Blant byggeverktøyene kan ANT være nyttig for mindre prosjekter mens Maven er bedre for å sørge for at alle utviklere følger de samme reglene. Gradle er det siste verktøyet som gir mest fleksibilitet.
Referanser:
- http: // ant.Apache.org/
- http: // ant.Apache.org/eføy/
- https: // maven.Apache.org/
- https: // gradle.org/
- http: // makble.com/gradle-Junit-Helloworld-Example
- https: // eksempler.Javacodegeeks.com/core-java/gradle/gradle-hello-world-tutorial/
- https: // gradle.org/maven-vs-gradle/
- https: // maven.Apache.org/guider/bli startet/maven-i-fem-minutter.html
- https: // stackoverflow.com/spørsmål/20755437/java-build-tools-ant-vs-maven
- https: // technologyconversations.com/2014/06/18/build-tools/
- https: // www.Quora.com/hva-er-pro-og-cons-of-maven-versus-ant-as-building-tools-for-java