Java

Ant vs Maven vs Gradle

Ant vs Maven vs Gradle

De juiste bouwtool kiezen: Ant vs Maven vs Gradle

Tijdens de softwareontwikkeling moeten ontwikkelaars dezelfde code steeds opnieuw opbouwen rebuild. Ze proberen vaak bash-scripts of andere scripttalen te gebruiken om de taak te automatiseren. Er zijn echter build-tools beschikbaar die meer geschikt zijn voor build-automatisering. De belangrijkste bouwtools zijn:

Laten we de tools onderzoeken om meer te weten te komen.

Apache mier met klimop

Apache Ant is een op Java gebaseerde opdrachtregeltool die XML-bestanden gebruikt om buildscripts te definiëren. Het wordt voornamelijk gebruikt voor Java-builds, maar het kan ook worden gebruikt voor C/C++-ontwikkeling. Ingebouwde taken bieden manieren om softwaretoepassingen te compileren, samen te stellen, te testen en uit te voeren. Gebruikers kunnen ook hun eigen "antlibs" maken om de functionaliteit van Ant . te verbeteren. Apache Ivy is een tool voor afhankelijkheidsbeheer die eenvoudig kan worden geïntegreerd met Ant om een ​​robuuster ecosysteem te bieden. De ontwikkeling van Ant begon in 2000.

Pluspunten

nadelen

Voorbeeld mier met klimop

U kunt de nieuwste Ant vanaf hier installeren. Je moet de zip downloaden, uitvouwen en de bin-map in je pad zetten. U kunt de volgende opdracht gebruiken om te zien of Ant correct is geïnstalleerd:

$ mier -versie
Apache Ant(TM) versie 1.10.1 samengesteld op 2 februari 2017

Zodra je Ant hebt geïnstalleerd, kun je de nieuwste Ivy-jar downloaden en in de lib-map in de Ant-map plaatsen.

Nadat je Ant hebt geïnstalleerd, maak je de mappen helloworld en helloworld/src . aan. Zet in de src-map helloworld.java-bestand met de code:

/******************************
Drukt "Hallo wereld" af!"
**************************/
openbare klas helloworld
public static void main(String[] args)
Systeem.uit.println("Hallo wereld!");

Maak nu in de map helloworld een build.xml-bestand met de volgende code:
























En maak in dezelfde map helloworld de klimop.xml-bestand met de volgende code:






De directorystructuur zou er als volgt uit moeten zien:

Hallo Wereld
|-- bouwen.xml
|-- klimop.xml
'-- src
'-- Hallo Wereld.Java

Nu kunt u de build uitvoeren met het commando:

$ mierenpot

Een succesvolle build zou de volgende output moeten opleveren:

$ mierenpot
Buildbestand: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml
oplossen:
[klimop:ophalen] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/klimop/ ::
[ivy:retrieve] :: instellingen laden :: url = jar:file:/Users/zak/BuildTools/ANT/apache
-mier-1.10.1/lib/klimop-2.4.0.pot!/org/apache/ivy/core/settings/ivysettings.xml
[klimop:ophalen] :: afhankelijkheden oplossen :: org.apache#helloworld;[email protected]
MacBook Air.lokaal
[ivy:ophalen]     confs: [standaard]
[ivy:retrieve]     gevonden junit#junt;4.12 in het openbaar
[ivy:retrieve]     gevonden organisatie.hamcrest#hamcrest-core;1.3 in het openbaar
[klimop: ophalen] :: resolutierapport :: 397ms oplossen :: artefacten dl 15ms
---------------------------------------------------------------------
| | modules            || artefacten   |
| conf       | nummer| zoeken|verdwenen|uitgezet|| aantal|verdronken|
---------------------------------------------------------------------
| standaard     | 2   | 0   | 0   | 0   || 4   | 0   |
---------------------------------------------------------------------
[klimop:ophalen] :: ophalen :: org.apache#helloworld
[ivy:ophalen]     confs: [standaard]
[ivy:retrieve]     0 artefacten gekopieerd, 4 al opgehaald (0kB/39ms)
compileren:
[mkdir] Gemaakt map: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
klassen
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: waarschuwing:
'includeantruntime' was niet ingesteld, standaard ingesteld op build.sysclasspath=laatste; ingesteld op false
voor herhaalbare builds
[javac] 1 bronbestand compileren naar /Users/zak/_work/LearnBuildScripts/LearnANT/
helloworld/bouwen/klassen
pot:
[mkdir] Gemaakt map: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[jar] Jar bouwen: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
Hallo Wereld.pot
SUCCESVOL BOUWEN
Totale tijd: 6 seconden

U kunt het jar-bestand als volgt uitproberen:

$ java -cp build/bin/helloworld.pot helloworld
Hallo Wereld!

We hebben het jar-bestand gedefinieerd dat in de build/bin-map moet worden geplaatst. De mappen worden aangemaakt tijdens het bouwen. Het ant jar-commando roept het jar-doel aan in de build.xml.

Maven

Maven is ontwikkeld om de problemen met op Ant gebaseerde scripting op te lossen. Het behield de XML-bestanden, maar nam een ​​andere benadering van de organisatie aan. In Ant moeten ontwikkelaars alle taken maken. Maven vermindert het maken van taken door strengere normen te implementeren voor het organiseren van code. Hierdoor is het makkelijker om aan de slag te gaan met standaardprojecten.

Het introduceerde ook afhankelijkheidsdownloads die de ontwikkeling gemakkelijker maakten. Vóór de introductie van Ivy in Ant moesten gebruikers afhankelijkheden lokaal beheren. Maven nam eerst de filosofie van afhankelijkheidsbeheer over.

De strenge normen van Maven maken het echter moeilijk om op maat gemaakte scripts te schrijven. De tool is gemakkelijk om mee te werken zolang het project de strikte normen volgt.

Pluspunten

nadelen

Maven Voorbeeld

Je kunt de nieuwste Maven hier downloaden. U kunt de installatie als volgt controleren:

$ mvn --versie
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00:58:13-07:00)
Maven home: /Gebruikers/zak/BuildTools/Maven/apache-maven-3.5.2
Java-versie: 1.8.0_74, leverancier: Oracle Corporation
Java home: /Bibliotheek/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Inhoud/Home/jre
Standaardlandinstelling: en_US, platformcodering: UTF-8
OS-naam: "mac os x", versie: "10.11.6", boog: "x86_64", familie: "mac"

Maak een helloworld-map en genereer een project met de volgende opdracht:

$ mvn archetype:generate -DgroupId=com.Bedrijfsnaam.helloworld -DartifactId=helloworld
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Het moet de mappenstructuur maken en de uitvoer genereren die er als volgt uitziet:

[INFO] Scannen naar projecten..
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Maven Stub-project bouwen (geen POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.0.0:genereer (standaard-cli) > genereer-bronnen
@ 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:genereren (standaard-cli) @ standalone-pom ---
[INFO] Project genereren in batchmodus
[INFO] ----------------------------------------------------------------------------
[INFO] De volgende parameters gebruiken voor het maken van een project van Old (1.x) Archetype:
maven-archetype-snelstart:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Waarde: /Users/zak/_work/LearnBuildScripts/LearnMaven
[INFO] Parameter: pakket, Waarde: com.Bedrijfsnaam.Hallo Wereld
[INFO] Parameter: groupId, Waarde: com.Bedrijfsnaam.Hallo Wereld
[INFO] Parameter: artifactId, Waarde: helloworld
[INFO] Parameter: pakketnaam, waarde: com.Bedrijfsnaam.Hallo Wereld
[INFO] Parameter: versie, Waarde: 1.0-SNAPSHOT
[INFO] project gemaakt op basis van Old (1.x) Archetype in dir: /Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[INFO] ------------------------------------------------------------------------
[INFO] BOUW SUCCES
[INFO] ------------------------------------------------------------------------
[INFO] Totale tijd: 8.602 euro
[INFO] Geëindigd op: 2018-01-27T00:05:37-08:00
[INFO] Laatste geheugen: 15M/152M
[INFO] ------------------------------------------------------------------------

De mappenstructuur zou er als volgt uit moeten zien:

Hallo Wereld
|-- pom.xml
'-- src
|-- hoofd
| '-- java
| '-- kom'
| '-- Bedrijfsnaam
| '-- Hallo Wereld
| '-- App.Java
'-- test
'-- java
'-- kom'
'-- Bedrijfsnaam
'-- Hallo Wereld
'-- AppTest.Java

de pom.xml bevat de build-configuraties. Binnen de pom.xml ziet de code er als volgt uit:

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd">
4.0.0
com.Bedrijfsnaam.Hallo Wereld
Hallo Wereld
pot
1.0-SNAPSHOT
Hallo Wereld
http://maven.apache.org


junit
junit
3.8.1
test


U kunt het jar-bestand genereren met de volgende opdracht:

$ mvn pakket
[INFO] Scannen naar projecten..
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Helloworld bouwen 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:bronnen (standaardbronnen) @ helloworld ---
[WAARSCHUWING] Platformcodering (UTF-8) gebruiken om gefilterde bronnen te kopiëren, i,.e.
build is platformafhankelijk!
[INFO] niet bestaande resourceDirectory overslaan /Users/zak/_work/LearnBuildScripts/LearnMaven/
helloworld/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1: compileren (standaard compileren) @ helloworld ---
[INFO] Wijzigingen gedetecteerd - module opnieuw compileren!
[WAARSCHUWING] Bestandscodering is niet ingesteld, met platformcodering UTF-8, i.e. bouwen is
platform afhankelijk!
[INFO] 1 bronbestand compileren naar /Users/zak/_work/LearnBuildScripts/LearnMaven/
halloworld/target/classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (standaard-testResources) @
Hallo Wereld ---
[WAARSCHUWING] Platformcodering (UTF-8) gebruiken om gefilterde bronnen te kopiëren, i,.e.
build is platformafhankelijk!
[INFO] niet bestaande resourceDirectory overslaan /Users/zak/_work/LearnBuildScripts/LearnMaven/
halloworld/src/test/resources
[INFO]
[INFO] --- maven-compiler-plug-in:3.1:testCompile (standaard-testCompile) @ helloworld ---
[INFO] Wijzigingen gedetecteerd - module opnieuw compileren!
[WAARSCHUWING] Bestandscodering is niet ingesteld, met platformcodering UTF-8, i.e. bouwen is
platform afhankelijk!
[INFO] 1 bronbestand compileren naar /Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/testklassen
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (standaardtest) @ helloworld ---
[INFO] Surefire-rapportmap: /Users/zak/_work/LearnBuildScripts/LearnMaven
/hallowereld/doel/
trefzekere-rapporten
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Hardlopen com.Bedrijfsnaam.Hallo Wereld.AppTest
Tests uitgevoerd: 1, fouten: 0, fouten: 0, overgeslagen: 0, verstreken tijd: 0.014 seconden
Resultaten :
Tests uitgevoerd: 1, fouten: 0, fouten: 0, overgeslagen: 0
[INFO]
[INFO] --- maven-jar-plug-in:2.4:jar (standaard-jar) @ helloworld ---
[INFO] Jar bouwen: /Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
halloworld-1.0-SNAPSHOT.pot
[INFO] ------------------------------------------------------------------------
[INFO] BOUW SUCCES
[INFO] ------------------------------------------------------------------------
[INFO] Totale tijd: 5.624 euro
[INFO] Geëindigd op: 2018-01-27T00:11:10-08:00
[INFO] Laatste geheugen: 16M/114M
[INFO] ------------------------------------------------------------------------

U kunt het jar-bestand als volgt uitvoeren:

$ java -cp target/helloworld-1.0-SNAPSHOT.jar com.Bedrijfsnaam.Hallo Wereld.App
Hallo Wereld!

Het jar-bestand wordt in de doelmap geplaatst.

Gradle

Gradle combineert de kracht van Ant en Maven. De eerste versie van Gradle werd uitgebracht in 2012. Het heeft een snelle adoptie gekend. Google gebruikt het momenteel voor Android OS.

In plaats van XML gebruikt Gradle de Groovy-taal. Als gevolg hiervan zijn build-scripts in Gradle gemakkelijker te schrijven en te lezen. Het gebruikte aanvankelijk Ivy voor afhankelijkheidsbeheer, maar gebruikt nu zijn eigen afhankelijkheidsengine engine.

Pluspunten

nadelen

Graadvoorbeeld

Je kunt Gradle hier installeren install. Nadat u Gradle in uw pad hebt ingesteld, kunt u dit controleren door:

$ gradle --versie
------------------------------------------------------------
Graad 4.5
------------------------------------------------------------
Bouwtijd:   24-01-2018 17:04:52 UTC
Revisie:     77d0ec90636f43669dc794ca17ef80dd65457bec
Groovy:       2.4.12
Ant:          Apache Ant(TM) versie 1.9.9 samengesteld op 2 februari 2017
JVM:          1.8.0_74 (Oracle Corporation 25.74-b02)
Besturingssysteem:           Mac OS X 10.11.6x86_64

Maak vervolgens de volgende directorystructuur:

Hallo Wereld
|-- bouwen.gradueel
'-- src
|-- hoofd
'-- java
'-- Hallo Wereld
'-- Hallo Wereld.Java

Voor de hallowereld.java zet de code uit het voorbeeld van Ant. En voor de bouw.gradle zet de volgende code in:

plug-in toepassen: 'java'
versie = '1.0'
opslagplaatsen
mavenCentral()

afhankelijkheden
testCompile groep: 'junit', naam: 'junit', versie: '4.12'

U kunt de opdracht "gradle taken -all" gebruiken om alle beschikbare opdrachten te bekijken. Gradle pakt automatisch de plug-ins op die u opgeeft in de build.gradle-bestand en toont u de extra taken die beschikbaar zijn dankzij de plug-ins.

U kunt de build krijgen door het volgende uit te voeren:

$ schaaltje
BOUW SUCCESVOL in 1s
2 bruikbare taken: 2 uitgevoerd

Je kunt je pot als volgt uitvoeren:

$ java -cp build/libs/helloworld-1.0.pot helloworld
Hallo Wereld!

Het jar-bestand wordt in de map build/libs geplaatst.

Conclusie

Van de bouwtools kan Ant nuttig zijn voor kleinere projecten, terwijl Maven er beter voor zorgt dat alle ontwikkelaars dezelfde regels volgen. Gradle is de nieuwste tool die de meeste flexibiliteit biedt.

Referenties:

Strijd om Wesnoth Zelfstudie
The Battle for Wesnoth is een van de meest populaire open source strategiespellen die je op dit moment kunt spelen. Dit spel is niet alleen al heel la...
0 A.D. zelfstudie
Van de vele strategiespellen die er zijn, 0 A.D. slaagt erin om op te vallen als een uitgebreide titel en een zeer diep, tactisch spel ondanks dat het...
Unity3D-zelfstudie
Inleiding tot Unity 3D Unity 3D is een krachtige game-ontwikkelingsengine. Het is platformoverschrijdend, zodat je games voor mobiel, internet, deskto...