Java

Ant vs Maven vs Gradle

Ant vs Maven vs Gradle

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:

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

Ulemper

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 -versjon
Apache 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:

$ maurkrukke

En vellykket build skal gi output som dette:

$ maurkrukke
Buildfile: / 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 helloworld
Hei 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

Ulemper

Maven Eksempel

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

$ mvn --versjon
Apache 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:

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-STILLBILDE
Hei Verden
http: // maven.apache.org


junit
junit
3.8.1
test


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.App
Hei 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

Ulemper

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 jar
BYGG SUCCESFULL om 1s
2 handlingsoppgaver: 2 utført

Du kan kjøre glasset ditt slik:

$ java -cp build / libs / helloworld-1.0.jar helloworld
Hei 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:

Beste Gamepad Mapping Apps for Linux
Hvis du liker å spille spill på Linux med en gamepad i stedet for et vanlig tastatur- og musinngangssystem, er det noen nyttige apper for deg. Mange P...
Nyttige verktøy for Linux-spillere
Hvis du liker å spille spill på Linux, er sjansen stor for at du har brukt apper og verktøy som Wine, Lutris og OBS Studio for å forbedre spilloppleve...
HD Remastered Games for Linux som aldri hadde en Linux-utgave tidligere
Mange spillutviklere og utgivere kommer med HD-remaster av gamle spill for å forlenge franchisetiden, vennligst fans som ber om kompatibilitet med mod...