Auswahl des richtigen Build -Tools: Ant gegen Maven gegen Gradle
Während der Softwareentwicklung müssen Entwickler immer wieder den gleichen Code wieder aufbauen. Sie versuchen oft, Bash -Skripte oder andere Skriptsprachen zu verwenden, um die Aufgabe zu automatisieren. Es stehen jedoch Build -Tools zur Verfügung, die für die Build -Automatisierung besser geeignet sind. Die vorherrschenden Build -Tools sind:
- Apache Ameise mit Ivy
- Maven
- Gradle
Lassen Sie uns die Tools untersuchen, um mehr herauszufinden.
Apache Ameise mit Ivy
Apache Ant ist ein Java-basierter Befehlszeilen-Tool, das XML-Dateien zum Definieren von Build-Skripten verwendet. Es wird überwiegend für Java -Builds verwendet, kann aber auch für die C/C ++ - Entwicklung verwendet werden. Integrierte Aufgaben bieten Möglichkeiten, Softwareanwendungen zu kompilieren, zusammenzustellen, zu testen und auszuführen. Benutzer können auch ihre eigenen „Antlibs“ erstellen, um die Funktionalität von Ant zu verbessern. Apache Ivy ist ein Abhängigkeitsmanagement -Tool, das sich problemlos in die Ameise integriert, um ein robusteres Ökosystem zu bieten. Die Entwicklung von ANT begann im Jahr 2000.
Profis
- Bessere Kontrolle über den Gesamtbauprozess
- Flexibel genug, um mit jedem Arbeitsprozess zu arbeiten
Nachteile
- XML -basierte Build -Dateien können groß und unbetont werden
- Viel Zeit und Ressourcen sind erforderlich, um die Build -Skripte zu erhalten
- IDE -Integration ist schwer zu erreichen
Ameise mit Ivy Beispiel
Sie können die neueste Ameise von hier installieren. Sie müssen den Reißverschluss herunterladen, erweitern und den Bin -Ordner in Ihren Weg legen. Sie können den folgenden Befehl verwenden, um festzustellen, ob Ant ordnungsgemäß installiert ist:
$ musversion
Apache Ant (TM) Version 1.10.1 Zusammengestellt am 2. Februar 2017
Sobald Sie Ant installiert haben, können Sie das neueste Ivy -Glas herunterladen und in den Lib -Ordner im Ameisenverzeichnis einfügen.
Nachdem Sie Ant installiert haben, erstellen Sie die Ordner HelloWorld und HelloWorld/SRC. In den SRC -Ordner helloWorld setzen.Java -Datei mit dem Code:
/*********************************************************************
Drucke aus "Hallo Welt!"
*************************/
öffentliche Klasse Helloworld
public static void main (String [] args)
System.aus.println ("Hallo Welt!");
Jetzt im Ordner helloWorld erstellen Sie einen Build.XML -Datei mit dem folgenden Code:
Und im selben HelloWorld -Ordner erstellen Sie den Ivy.XML -Datei mit dem folgenden Code:
Die Verzeichnisstruktur sollte so aussehen:
Hallo Welt
|- bauen.xml
|- Ivy.xml
'- Src
'-- Hallo Welt.Java
Jetzt können Sie den Build mit dem Befehl ausführen:
$ Ant Jar
Ein erfolgreicher Build sollte eine solche Leistung liefern:
$ Ant Jar
BuildFile:/user/zak/_work/LearnBuildscripts/Learnant/HelloWorld/Build.xml
beschließen:
[Ivy: Abrufen] :: Apache Ivy 2.4.0 - 20141213170938 :: http: // Ant.Apache.org/ ivy/ ::
[Ivy: Abrufen] :: Ladeeinstellungen :: url = jar: file:/user/zak/buildtools/ant/apache
-Ant-1.10.1/lib/ivy-2.4.0.Krug!/org/apache/ivy/core/Einstellungen/IVYSettings.xml
[Ivy: Abrufen] :: Auflösen von Abhängigkeiten :: org.Apache#HelloWorld; Arbeit@Zakirs-
MacBook-Air.lokal
[Ivy: Abrufen] confs: [Standard]
[Ivy: Abrufen] Found Junit#Junit; 4.12 in der Öffentlichkeit
[Ivy: Abrufen] gefunden org.Hamcrest#Hamcrest-Core; 1.3 öffentlich
[Ivy: Abrufen] :: Auflösungsbericht :: Resolve 397ms :: Artefakte DL 15ms
---------------------------------------------------------------------
| | Module || Artefakte |
| conf | Nummer | Suche | dwnlded | erfunden || Nummer | dwnlded |
---------------------------------------------------------------------
| Standard | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[Ivy: Abrufen] :: Abrufen :: org.Apache#HelloWorld
[Ivy: Abrufen] confs: [Standard]
[Ivy: Abrufen] 0 Artefakte kopiert, 4 bereits abgerufen (0 KB/39 ms)
kompilieren:
[Mkdir] erstellt Dir:/user/zak/_work/LearnBuildscripts/Learnant/HelloWorld/Build/
Klassen
[Javac]/Benutzer/Zak/_work/LearnBuildscripts/Learnant/HelloWorld/Build.XML: 22: Warnung:
'IncludeanTruntime''was war nicht festgelegt, um zu bauen.sysclassPath = zuletzt; auf false einstellen
für wiederholbare Builds
[Javac] Kompilien von 1 Quelldatei in/user/zak/_work/LearnBuildscripts/Learnant/Kompilieren
HelloWorld/Build/Klassen
Krug:
[Mkdir] erstellt Dir:/user/zak/_work/LearnBuildscripts/Learnant/HelloWorld/Build/bin
[Jar] Erstellen von JAR:/user/zak/_work/LearnBuildscripts/Learnant/HelloWorld/Build/bin/
Hallo Welt.Krug
Erfolgreich aufbauen
Gesamtzeit: 6 Sekunden
Sie können die JAR -Datei wie folgt ausprobieren:
$ java -cp Build/bin/helloWorld.Jar HelloWorld
Hallo Welt!
Wir haben die JAR -Datei definiert, die in den Ordner "Build/bin. Die Ordner werden während des Builds erstellt. Der Befehl gegen JAR ruft das JAR -Ziel im Build auf.xml.
Maven
Maven wurde entwickelt, um die Probleme mit dem mit Ameisenbasis konfrontierten Skripten zu lösen. Es hielt die XML -Dateien, verfolgte jedoch einen anderen Ansatz für die Organisation. In Ant müssen Entwickler alle Aufgaben erstellen. Maven verringert die Erstellung von Aufgaben, indem sie stärkere Standards für die Organisation von Code implementiert. Infolgedessen ist es einfacher, mit Standardprojekten zu beginnen.
Es wurden auch Abhängigkeits -Downloads eingeführt, wodurch die Entwicklung erleichtert wurde. Vor der Einführung von Ivy in ANT mussten die Benutzer Abhängigkeiten lokal verwalten. Maven übernahm zuerst die Abhängigkeitsmanagementphilosophie.
Mavens strenge Standards machen es jedoch schwierig, benutzerdefinierte Build -Skripte zu schreiben. Das Tool ist leicht zu arbeiten, solange das Projekt den strengen Standards folgt.
Profis
- Download für automatische Abhängigkeiten
- Alle Abhängigkeiten werden automatisch in der Quellensteuerung als Teil der Maven -Skripte aufgezeichnet
- Standardisiert und vereinfacht den Build -Prozess
- Integriert sich einfach in IDES und CI/CD -Systeme
Nachteile
- Nicht flexibel beim Erstellen von benutzerdefinierten Workflows
- Eine steile Lernkurve und der Prozess sind für Anfänger schwierig zu verstehen
- Zeitaufwändig, um Build-Probleme und neue Bibliotheksintegrationen zu lösen
- Nicht gut mit mehreren Versionen derselben Abhängigkeit
Maven Beispiel
Sie können den neuesten Maven von hier herunterladen. Sie können die Installation wie diese überprüfen:
$ mvn -Verssion
Apache Maven 3.5.2 (138EDD61FD100EC658BFA2D307C43B76940A5D7D; 2017-10-18T00: 58: 13-07: 00)
Maven Home:/Benutzer/Zak/Buildtools/Maven/Apache-Maven-3.5.2
Java -Version: 1.8.0_74, Anbieter: Oracle Corporation
Java Home:/Bibliothek/Java/Javavirtualmachines/JDK1.8.0_74.jdk/contents/home/jre
Standardgebiet: EN_US, Plattformcodierung: UTF-8
Betriebssystemname: "Mac OS X", Version: "10.11.6 ", Arch:" x86_64 ", Familie:" Mac "
Erstellen Sie einen HelloWorld -Ordner und generieren Sie ein Projekt mit dem folgenden Befehl:
$ mvn Archetyp: generieren -dgroupid = com.Name der Firma.helloWorld -dartifactid = helloWorld
-Darchetypeartifactid = maven-archetyp-quickstart -dinteractivemode = false
Es sollte die Ordnerstruktur erstellen und die Ausgabe erzeugen, die so aussieht:
[Info] Scannen nach Projekten…
[DIE INFO]
[DIE INFO] ------------------------------------------------------------------------
[Info] Erstellen von Maven Stub -Projekt (no pom) 1
[DIE INFO] ------------------------------------------------------------------------
[DIE INFO]
[Info] >>> Maven-Archetyp-Plugin: 3.0.0: generieren (Standard-Cli)> Generate-Sources generieren
@ Standalone-Pom >>>
[DIE INFO]
[DIE INFO] <<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ Standalone-Pom <<<
[DIE INFO]
[DIE INFO]
[Info] --- Maven-Archetyp-Plugin: 3.0.0: generieren (Standard-Cli) @ Standalone-Pom ---
[Info] Projekt im Stapelmodus generieren
[DIE INFO] ----------------------------------------------------------------------------
[Info] Verwenden der folgenden Parameter zum Erstellen von Projekten aus alten (1.x) Archetyp:
Maven-Archetyp-Quickstart: 1.0
[DIE INFO] ----------------------------------------------------------------------------
[Info] Parameter: basiert, Wert:/Benutzer/Zak/_work/LearnBuildscripts/Learnmaven
[Info] Parameter: Paket, Wert: com.Name der Firma.Hallo Welt
[Info] Parameter: GroupID, Wert: com.Name der Firma.Hallo Welt
[Info] Parameter: Artefaktid, Wert: helloWorld
[Info] Parameter: Packagename, Wert: com.Name der Firma.Hallo Welt
[Info] Parameter: Version, Wert: 1.0-Snapshot
[Info] Projekt erstellt von Old (1.x) Archetyp in Dir:/user/zak/_work/
LearnBuildscripts/Learnmaven/HelloWorld
[DIE INFO] ------------------------------------------------------------------------
[Info] Erfolg erstellen
[DIE INFO] ------------------------------------------------------------------------
[Info] Gesamtzeit: 8.602 s
[Info] fertig unter: 2018-01-27t00: 05: 37-08: 00
[Info] Endspeicher: 15m/152m
[DIE INFO] ------------------------------------------------------------------------
Die Ordnerstruktur sollte so aussehen:
Hallo Welt
|- pom.xml
'- Src
|- Main
| '- Java
| '- com
| '-- Name der Firma
| '-- Hallo Welt
| '- App.Java
'-- prüfen
'- Java
'- com
'-- Name der Firma
'-- Hallo Welt
'- Apptest.Java
Der Pom.XML enthält die Build -Konfigurationen. Im Pom.XML Der Code sieht so aus:
XSI: Schemalocation = "http: // maven.Apache.org/pom/4.0.0 http: // maven.Apache.org/maven-v4_0
_0.xsd ">
4.0.0
com.Name der Firma.Hallo Welt
Hallo Welt
Krug
1.0-Snapshot
Hallo Welt
http: // maven.Apache.Org
jung
jung
3.8.1
prüfen
Sie können die JAR -Datei mit dem folgenden Befehl generieren:
$ mvn Paket
[Info] Scannen nach Projekten…
[DIE INFO]
[DIE INFO] ------------------------------------------------------------------------
[Info] Erstellung von HelloWorld 1.0-Snapshot
[DIE INFO] ------------------------------------------------------------------------
[DIE INFO]
[Info] --- maven-ressources-plugin: 2.6: Ressourcen (Standard-Ressourcen) @ helloWorld ---
[WARNUNG] Verwenden der Plattform-Codierung (eigentlich UTF-8), um gefilterte Ressourcen zu kopieren, i.e.
Build ist plattformabhängig!
[Info] Nicht vorhandene Ressourcen -Richtungsabteilung/Benutzer/Zak/_work/LearnBuildscripts/Learnmaven/überspringen
HelloWorld/SRC/Main/Ressourcen
[DIE INFO]
[Info] --- maven-compiler-plugin: 3.1: kompilieren (Standard-Kompile) @ helloWorld ---
[Info] Erkennete Änderungen - Neukompilieren des Moduls neu kompilieren!
[WARNUNG] Dateikodierung wurde nicht festgelegt, wobei die Plattform-Codierung von UTF-8, i.e. bauen ist
Plattform abhängig!
[Info] Kompilien von 1 Quelldatei in/user/zak/_work/LearnBuildscripts/LearnMaven/Kompilieren
HelloWorld/Ziel/Klassen
[DIE INFO]
[Info] --- maven-ressources-plugin: 2.6: TestResources (Standard-Testresources) @
Hallo Welt ---
[WARNUNG] Verwenden der Plattform-Codierung (eigentlich UTF-8), um gefilterte Ressourcen zu kopieren, i.e.
Build ist plattformabhängig!
[Info] Nicht vorhandene Ressourcen -Richtungsabteilung/Benutzer/Zak/_work/LearnBuildscripts/Learnmaven/überspringen
HelloWorld/SRC/Test/Ressourcen
[DIE INFO]
[Info] --- maven-compiler-plugin: 3.1: testcompile (Standard-TestCompile) @ helloWorld ---
[Info] Erkennete Änderungen - Neukompilieren des Moduls neu kompilieren!
[WARNUNG] Dateikodierung wurde nicht festgelegt, wobei die Plattform-Codierung von UTF-8, i.e. bauen ist
Plattform abhängig!
[Info] Kompilien von 1 Quelldatei in/user/zak/_work/LearnBuildscripts/Learnmaven
/HelloWorld/Ziel/Testklasse
[DIE INFO]
[Info] --- maven-surefire-plugin: 2.12.4: Test (Standardtest) @ helloWorld ---
[Info] SureFire Report Directory:/Benutzer/Zak/_work/LearnBuildscripts/Learnmaven
/HelloWorld/Ziel/
todesfeuer berichteten
-------------------------------------------------------
T e s t s
-------------------------------------------------------
Laufen com.Name der Firma.Hallo Welt.Apptest
Tests laufen: 1, Fehler: 0, Fehler: 0, übersprungen: 0, Zeit verstrichen: 0.014 Sek
Ergebnisse :
Tests laufen: 1, Fehler: 0, Fehler: 0, übersprungen: 0
[DIE INFO]
[Info] --- maven-jar-plugin: 2.4: Jar (Standard-Jar) @ helloWorld ---
[Info] Erstellen von JAR:/user/Zak/_work/LearnBuildscripts/Learnmaven/HelloWorld/Target/
HelloWorld-1.0-Snapshot.Krug
[DIE INFO] ------------------------------------------------------------------------
[Info] Erfolg erstellen
[DIE INFO] ------------------------------------------------------------------------
[Info] Gesamtzeit: 5.624 s
[Info] fertig unter: 2018-01-27t00: 11: 10-08: 00
[Info] Endspeicher: 16m/114m
[DIE INFO] ------------------------------------------------------------------------
Sie können die JAR -Datei wie diese ausführen:
$ java -cp target/helloWorld -1.0-Snapshot.Jar com.Name der Firma.Hallo Welt.App
Hallo Welt!
Die JAR -Datei wird in den Zielordner gestellt.
Gradle
Gradle kombiniert die Kraft von Ameisen und Maven. Die erste Version von Gradle wurde 2012 veröffentlicht. Es hat eine schnelle Adoption gesehen. Google verwendet es derzeit für Android OS.
Anstelle von XML verwendet Gradle die groovige Sprache. Erstellen von Skripten in Gradle sind daher einfacher zu schreiben und zu lesen. Es wurde zunächst Ivy zum Abhängigkeitsmanagement verwendet, aber es wird jetzt eine eigene Abhängigkeitsmotor verwendet.
Profis
- Bietet Standardisierung und bleibt flexibel
- Einfach zu lesen und zu schreiben Build -Skripte
- Besser bei der Umstellung mehrerer Versionen von Abhängigkeiten
- In der Lage, mehrere Programmiersprachen und Technologien zu handhaben
- Aktive Community hilft bei der Entwicklung des Tools
- Gradle DSL (domänenspezifische Sprache) macht es einfache Konfigurationsstruktur
- Gradle bietet Leistungsverbesserungen mit inkrementell, Build Cache und den Gradle -Daemon
Nachteile
- IDE -Integration nicht so gut wie Maven
Gradle -Beispiel
Sie können Gradle von hier aus installieren. Sobald Sie Gradle in Ihrem Weg eingerichtet haben, können Sie es überprüfen, um:
$ Gradle --version
------------------------------------------------------------
Gradle 4.5
------------------------------------------------------------
Bauzeit: 2018-01-24 17:04:52 UTC
Revision: 77D0EC90636F43669DC794CA17EF80DD65457BEC
Groovy: 2.4.12
Ant: Apache Ant (TM) Version 1.9.9 Zusammengestellt am 2. Februar 2017
JVM: 1.8.0_74 (Oracle Corporation 25.74-B02)
OS: Mac OS X 10.11.6 x86_64
Erstellen Sie als nächstes die folgende Verzeichnisstruktur:
Hallo Welt
|- bauen.Gradle
'- Src
|- Main
'- Java
'-- Hallo Welt
'-- Hallo Welt.Java
Für die Helloworld.Java stellte den Code aus dem Ameisenbeispiel. Und für den Bau.Gradle in den folgenden Code eingebaut:
Plugin anwenden: 'Java'
Version = '1.0 '
Repositories
mavencentral ()
Abhängigkeiten
TestCompile -Gruppe: 'Junit', Name: 'Junit', Version: '4.12 '
Sie können den Befehl „Gradle Tasks -all“ verwenden, um alle verfügbaren Befehle zu betrachten. Gradle nimmt automatisch die im Build angegebenen Plugins auf.Gradle -Datei und zeigt Ihnen die zusätzlichen Aufgaben an, die aufgrund der Plugins verfügbar sind.
Sie können den Build durch Laufen bekommen:
$ Gradle Jar
Bauen Sie erfolgreich in 1s auf
2 umsetzbare Aufgaben: 2 ausgeführt
Sie können Ihr Glas so ausführen:
$ java -cp Build/libs/helloWorld -1.0.Jar HelloWorld
Hallo Welt!
Die JAR -Datei wird in den Ordner "Build/libs" eingesetzt.
Abschluss
Unter den Build -Tools kann Ant für kleinere Projekte nützlich sein, während Maven besser ist, um sicherzustellen, dass alle Entwickler dieselben Regeln befolgen. Gradle ist das neueste Tool, das die größte Flexibilität bietet.
Verweise:
- http: // ant.Apache.org/
- http: // ant.Apache.org/ivy/
- https: // maven.Apache.org/
- https: // gradle.org/
- http: // makble.com/gradle-junit-helloworld-Exampe
- https: // Beispiele.Javacodegeeks.com/core-java/gradle/gradle-hello-world-tutorial/
- https: // gradle.org/maven-vs-Gradle/
- https: // maven.Apache.org/Führer/Start/Maven-in-Five-Minutes.html
- https: // stackoverflow.com/Fragen/20755437/Java-Build-Tools-Ant-VS-Maven
- https: // Technology Conversations.com/2014/06/18/Build-Tools/
- https: // www.Quora.com/What-the-Pros-and-Cons-of-Maven-gegen-Ant-AT-building-Tools-for-Java