Java

Ant vs Maven vs Gradle

Ant vs Maven vs Gradle

Valg af det rigtige buildværktøj: Ant vs Maven vs Gradle

Under softwareudvikling skal udviklere genopbygge den samme kode igen og igen. De prøver ofte at bruge bash-scripts eller andre scripting-sprog til at automatisere opgaven. Der er dog tilgængelige build-værktøjer, der er mere passende til build-automatisering. De dominerende byggeværktøjer er:

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

Apache Ant 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 Ant funktionalitet. Apache Ivy er et afhængighedsstyringsværktøj, der let integreres med Ant for at give et mere robust økosystem. Udviklingen af ​​Ant startede i 2000.

Fordele

Ulemper

Ant med Ivy Eksempel

Du kan installere den nyeste Ant herfra. Du skal downloade zip, udvide og placere bin-mappen 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 den 2. februar 2017

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

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

/ **************************
Udskriver "Hello World!"
*************************** /
offentlig klasse helloworld
offentlig statisk ugyldig hoved (String [] args)
System.ud.println ("Hello World!");

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
























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






Katalogstrukturen skal se sådan ud:

Hej Verden
| - build.xml
| - vedbend.xml
'- src
'-- Hej Verden.java

Nu kan du køre build med kommandoen:

$ myre krukke

En vellykket build skal levere output som dette:

$ myre krukke
Buildfile: / Brugere / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml
beslutte:
[vedbend: hente] :: Apache Ivy 2.4.0 - 20141213170938 :: http: // ant.apache.org / ivy / ::
[vedbend: hente] :: indstillinger for indlæsning :: url = jar: fil: / Brugere / zak / BuildTools / ANT / apache
-ant-1.10.1 / lib / ivy-2.4.0.krukke!/ org / apache / ivy / core / settings / ivysettings.xml
[ivy: retrieve] :: løsning af afhængigheder :: org.apache # helloworld; [email protected]
MacBook-Air.lokal
[vedbend: hente] confs: [standard]
[vedbend: hente] fundet junit # junit; 4.12 offentligt
[vedbend: hente] fundet org.hamcrest # hamcrest-core; 1.3 offentligt
[vedbend: hente] :: opløsningsrapport :: løse 397ms :: artefakter dl 15ms
---------------------------------------------------------------------
| | moduler || artefakter |
| conf | nummer | søg | dwnlded | fordrevet || nummer | trukket |
---------------------------------------------------------------------
| standard | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[vedbend: hente] :: hentning :: org.apache # helloworld
[vedbend: hente] confs: [standard]
[vedbend: hent] 0 kopierede artefakter, 4 allerede hentet (0kB / 39ms)
udarbejde:
[mkdir] Oprettet dir: / Brugere / zak / _work / LearnBuildScripts / LearnANT / helloworld / build /
klasser
[javac] / Brugere / zak / _work / LearnBuildScripts / LearnANT / helloworld / build.xml: 22: advarsel:
'includeeantruntime' var ikke indstillet, som standard at bygge.sysclasspath = sidste; indstillet til falsk
til gentagelige bygninger
[javac] Kompilering af 1 kildefil til / Brugere / zak / _work / LearnBuildScripts / LearnANT /
helloworld / build / klasser
krukke:
[mkdir] Oprettet dir: / Brugere / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin
[jar] Bygningskrukke: / Brugere / zak / _work / LearnBuildScripts / LearnANT / helloworld / build / bin /
Hej Verden.krukke
BYGG FRA
Samlet tid: 6 sekunder

Du kan prøve jar-filen på denne måde:

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

Vi har defineret jar-filen, der skal placeres i build / bin-mappen. Mapperne oprettes under build. Ant jar-kommandoen kalder jar-målet i buildet.xml.

Maven

Maven blev udviklet til at løse problemerne med Ant-baseret scripting. Det opbevarede XML-filerne, men tog en anden tilgang til organisationen. I Ant skal udviklere oprette alle opgaverne. Maven mindsker 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 måtte brugerne administrere afhængigheder lokalt. Maven vedtog først afhængighedsstyringsfilosofien.

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

Fordele

Ulemper

Maven Eksempel

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

$ mvn --version
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00: 58: 13-07: 00)
Maven hjem: / Brugere / zak / BuildTools / Maven / apache-maven-3.5.2
Java-version: 1.8.0_74, leverandør: Oracle Corporation
Java-hjem: / Bibliotek / Java / JavaVirtualMachines / jdk1.8.0_74.jdk / Indhold / Hjem / jre
Standard locale: da_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 -DroupId = com.firmanavn.helloworld -DartifactId = helloworld
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode = false

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

[INFO] Scanner 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] Genererer projekt i batch-tilstand
[INFO] ----------------------------------------------------------------------------
[INFO] Brug af følgende parametre til oprettelse af projekt fra Old (1.x) Arketype:
maven-archetype-quickstart: 1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Værdi: / Brugere / zak / _work / LearnBuildScripts / LearnMaven
[INFO] Parameter: pakke, Værdi: com.firmanavn.Hej Verden
[INFO] Parameter: groupId, Værdi: com.firmanavn.Hej Verden
[INFO] Parameter: artifactId, Værdi: helloworld
[INFO] Parameter: packageName, Value: com.firmanavn.Hej Verden
[INFO] Parameter: version, Værdi: 1.0-SNAPSHOT
[INFO] -projekt oprettet fra Old (1.x) Arketype i dir: / Brugere / zak / _work /
LearnBuildScripts / LearnMaven / helloworld
[INFO] ------------------------------------------------------------------------
[INFO] BYGG SUCCES
[INFO] ------------------------------------------------------------------------
[INFO] Samlet tid: 8.602 s
[INFO] Færdiggjort: 2018-01-27T00: 05: 37-08: 00
[INFO] Endelig hukommelse: 15M / 152M
[INFO] ------------------------------------------------------------------------

Mappestrukturen skal se sådan ud:

Hej Verden
| - pom.xml
'- src
| - hoved
| '- java
| '- com
| '-- firmanavn
| '-- Hej Verden
| '- App.java
'- test
'- java
'- com
'-- firmanavn
'-- Hej Verden
'- AppTest.java

Pom.xml indeholder buildkonfigurationerne. Inde i pom.xml koden ser sådan ud:

xsi: schemaLocation = "http: // maven.apache.org / POM / 4.0.0 http: // maven.apache.org / maven-v4_0
_0.xsd ">
4.0.0
com.firmanavn.Hej Verden
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] Scanner efter projekter ..
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Bygning af helloworld 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin: 2.6: ressourcer (standardressourcer) @ helloworld ---
[ADVARSEL] Brug af platformskodning (UTF-8 faktisk) til at kopiere filtrerede ressourcer, dvs.e.
build er platformafhængig!
[INFO] spring over ikke eksisterende resourceDirectory / Brugere / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / main / ressourcer
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: kompilér (standardkompilering) @ helloworld ---
[INFO] Opdagede ændringer - kompilering af modulet igen!
[ADVARSEL] Filkodning er ikke indstillet ved hjælp af platformskodning UTF-8, i.e. bygge er
platformafhængig!
[INFO] Kompilering af 1 kildefil til / Brugere / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / mål / klasser
[INFO]
[INFO] --- maven-resources-plugin: 2.6: testResources (standard-testResources) @
Hej Verden ---
[ADVARSEL] Brug af platformskodning (UTF-8 faktisk) til at kopiere filtrerede ressourcer, dvs.e.
build er platformafhængig!
[INFO] spring over ikke eksisterende resourceDirectory / Brugere / zak / _work / LearnBuildScripts / LearnMaven /
helloworld / src / test / ressourcer
[INFO]
[INFO] --- maven-compiler-plugin: 3.1: testCompile (standard-testCompile) @ helloworld ---
[INFO] Opdagede ændringer - kompilering af modulet igen!
[ADVARSEL] Filkodning er ikke indstillet ved hjælp af platformskodning UTF-8, i.e. bygge er
platformafhængig!
[INFO] Kompilering af 1 kildefil til / Brugere / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / target / test-klasser
[INFO]
[INFO] --- maven-surefire-plugin: 2.12.4: test (standardtest) @ helloworld ---
[INFO] Surefire-rapportmappe: / Brugere / zak / _work / LearnBuildScripts / LearnMaven
/ helloworld / mål /
sikkerhedsrapporter
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Kører com.firmanavn.Hej Verden.AppTest
Testkørsel: 1, Fejl: 0, Fejl: 0, Springet over: 0, Forløbet tid: 0.014 sek
Resultater:
Testkørsel: 1, Fejl: 0, Fejl: 0, Springet over: 0
[INFO]
[INFO] --- maven-jar-plugin: 2.4: jar (standard-jar) @ helloworld ---
[INFO] Bygningskrukke: / Brugere / zak / _work / LearnBuildScripts / LearnMaven / helloworld / target /
helloworld-1.0-SNAPSHOT.krukke
[INFO] ------------------------------------------------------------------------
[INFO] BYGG SUCCES
[INFO] ------------------------------------------------------------------------
[INFO] Samlet tid: 5.624 s
[INFO] Færdiggjort: 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.jar com.firmanavn.Hej Verden.App
Hej Verden!

Jar-filen placeres i målmappen.

Gradle

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

I stedet for XML bruger Gradle Groovy-sproget. Som et resultat 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

Ulemper

Gradleeksempel

Du kan installere Gradle herfra. Når du har konfigureret Gradle på din vej, kan du kontrollere det ved at:

$ gradle --version
------------------------------------------------------------
Grad 4.5
------------------------------------------------------------
Byggetid: 2018-01-24 17:04:52 UTC
Revision: 77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy: 2.4.12
Ant: Apache Ant (TM) version 1.9.9 udarbejdet den 2. februar 2017
JVM: 1.8.0_74 (Oracle Corporation 25.74-b02)
Styresystem: Mac OS X 10.11.6 x86_64

Opret derefter følgende bibliotekstruktur:

Hej Verden
| - build.gradle
'- src
| - hoved
'- java
'-- Hej Verden
'-- Hej Verden.java

For helloworld.java satte koden fra Ant-eksemplet. Og til opbygning.gradle sæt i følgende kode:

anvend plugin: 'java'
version = '1.0 '
opbevaringssteder
mavenCentral ()

afhængigheder
testCompile gruppe: 'junit', navn: 'junit', version: '4.12 '

Du kan bruge kommandoen “gradle Tasks -all” til at se på alle tilgængelige kommandoer. Gradle henter automatisk de plugins, du angiver i buildet.gradle-fil og viser dig de ekstra opgaver, der er tilgængelige på grund af plugins.

Du kan få build ved at køre:

$ gradle krukke
BYG LIGTIG i 1s
2 handlinger, der kan handles: 2 udføres

Du kan køre din krukke sådan:

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

Jar-filen placeres i build / libs-mappen.

Konklusion

Blandt byggeværktøjerne kan Ant være nyttigt 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 mest fleksibilitet.

Referencer:

Installer nyeste Dolphin Emulator til Gamecube & Wii på Linux
Dolphin Emulator giver dig mulighed for at spille dine valgte Gamecube & Wii-spil på Linux Personal Computers (PC). Som en frit tilgængelig og open s...
Sådan bruges GameConqueror Cheat Engine i Linux
Artiklen dækker en vejledning om brug af GameConqueror-snydemotoren i Linux. Mange brugere, der spiller spil på Windows, bruger ofte "Cheat Engine" -a...
Bedste spilkonsolemulatorer til Linux
Denne artikel viser en liste over populære spilkonsolemuleringssoftware, der er tilgængelig til Linux. Emulation er et softwarekompatibilitetslag, der...