Ameise gegen Maven gegen Gradle

Ant Vs Maven Vs Gradle



Während der Softwareentwicklung müssen Entwickler den gleichen Code immer wieder neu erstellen. Sie versuchen oft, Bash-Skripte oder andere Skriptsprachen zu verwenden, um die Aufgabe zu automatisieren. Es gibt jedoch Build-Tools, die besser für die Build-Automatisierung geeignet sind. Die vorherrschenden Build-Tools sind:

Lassen Sie uns die Tools untersuchen, um mehr zu erfahren.







Apache Ameise mit Efeu

Apache Ant ist ein Java-basiertes Befehlszeilentool, das XML-Dateien verwendet, um Build-Skripts zu definieren. Es wird hauptsächlich für Java-Builds verwendet, kann aber auch für die C/C++-Entwicklung verwendet werden. Integrierte Tasks bieten Möglichkeiten zum Kompilieren, Assemblieren, Testen und Ausführen von Softwareanwendungen. Benutzer können auch ihre eigenen Antilibs erstellen, um die Funktionalität von Ant zu verbessern. Apache Ivy ist ein Tool zur Verwaltung von Abhängigkeiten, das sich leicht in Ant integrieren lässt, um ein robusteres Ökosystem bereitzustellen. Die Entwicklung von Ant begann im Jahr 2000.



Vorteile



  • Bessere Kontrolle über den gesamten Build-Prozess
  • Flexibel genug, um mit jedem Arbeitsprozess zu arbeiten

Nachteile





  • XML-basierte Build-Dateien können groß und nicht mehr wartbar werden
  • Es wird viel Zeit und Ressourcen benötigt, um die Build-Skripte zu pflegen
  • IDE-Integration ist schwer zu erreichen

Ameise mit Efeu Beispiel

Sie können die neueste Ant von installieren Hier . Sie müssen die ZIP-Datei herunterladen, erweitern und den bin-Ordner in Ihren Pfad legen. Sie können den folgenden Befehl verwenden, um zu sehen, ob Ant richtig installiert ist:

$ ameise-Ausführung
Apache-Ameise(TM)Version 1.10.1 kompiliert am Februar2 2017

Sobald Sie Ant installiert haben, können Sie das neueste Ivy-Jar herunterladen und im lib-Ordner im Ant-Verzeichnis ablegen.



Nachdem Sie Ant installiert haben, erstellen Sie die Ordner helloworld und helloworld/src. Legen Sie im Ordner src die Datei helloworld.java mit dem Code ab:

/ *************************

Druckt „Hallo Welt!“ aus.

************************** /

öffentlich KlasseHallo Welt{

öffentlich statisch Leerehauptsächlich( Zeichenfolge []args) {
System .aus.println('Hallo Welt!');
}

}

Erstellen Sie nun im helloworld-Ordner eine build.xml-Datei mit dem folgenden Code:

xmlns: Efeu='antlib:org.apache.ivy.ant' Name='Hallo Welt' Ursprünglich='Krug'>

Name='src.dir' Wert='src'/>
Name='build.dir' Wert='bauen'/>
Name='klassen.dir' Wert='${build.dir}/classes'/>
Name='bin.dir' Wert='${build.dir}/bin'/>
Name='lib.dir' Wert='lib' />
Ich würde='lib.pfad.id'>
dir='$ {lib.dir}' />
>

Name='beschließen'>
/>
>

Name='sauber'>
dir='${build.dir}'/>
>

Name='kompilieren' kommt darauf an='beschließen'>
dir='$ {classes.dir}'/>
srcdir='$ {src.dir}' destdir='$ {classes.dir}' Klassenpfadref='lib.pfad.id'/>
>

Name='Krug' kommt darauf an='kompilieren'>
dir='${bin.dir}'/>
Zieldatei='${bin.dir}/${ant.project.name}.jar' basiertir='$ {classes.dir}'/>
>

>

Erstellen Sie im selben helloworld-Ordner die Datei ivy.xml mit dem folgenden Code:

Ausführung='2.0'>
Organisation='org.apache' Modul='Hallo Welt'/>
>
org='junite' Name='junite' Rev='4.12'/>
>
>

Die Verzeichnisstruktur sollte wie folgt aussehen:

Hallo Welt
|-- build.xml
| - ivy.xml
`-- src
`- helloworld.java

Jetzt können Sie den Build mit dem Befehl ausführen:

$AmeiseKrug

Ein erfolgreicher Build sollte eine Ausgabe wie diese liefern:

$ Ameisenglas
Builddatei: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml

beschließen:
[ivy:retrieve] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy:retrieve] :: Einstellungen laden :: url = jar:file:/Users/zak/BuildTools/ANT/apache
-ant-1.10.1/lib/ivy-2.4.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:retrieve] :: Abhängigkeiten auflösen :: org.apache#helloworld; [E-Mail geschützt]
MacBook-Air.local
[ivy:retrieve] confs: [Standard]
[ivy:retrieve] fand junit#junit;4.12 in der Öffentlichkeit
[ivy:retrieve] hat org.hamcrest#hamcrest-core;1.3 in der Öffentlichkeit gefunden
[ivy:retrieve] :: Auflösungsbericht :: 397ms auflösen :: Artefakte dl 15ms
-------------------------------------------------- -------------------
| | Module || Artefakte |
| conf | Nummer| suchen|ausgelöscht|verdrängt|| Nummer|ausgeschaltet|
-------------------------------------------------- -------------------
| Standard | 2 | 0 | 0 | 0 || 4 | 0 |
-------------------------------------------------- -------------------
[ivy:retrieve] :: abrufen :: org.apache#helloworld
[ivy:retrieve] confs: [Standard]
[ivy:retrieve] 0 Artefakte kopiert, 4 bereits abgerufen (0kB/39ms)

kompilieren:
[mkdir] Erstelltes Verzeichnis: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/
Klassen
[javac] /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml:22: Warnung:
'includeantruntime'wurde nicht gesetzt, standardmäßig ist build.sysclasspath=last; auf false setzen
für wiederholbare Builds
[javac] Kompilieren einer Quelldatei nach /Users/zak/_work/LearnBuildScripts/LearnANT/
halloworld/build/classes

Krug:
[mkdir] Erstelltes Verzeichnis: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin
[jar] Baukasten: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build/bin/
halloworld.jar

ERFOLGREICH AUFBAUEN
Gesamtzeit: 6 Sekunden

Sie können die JAR-Datei wie folgt ausprobieren:

$ java -cp build/bin/helloworld.KrugHallo Welt
Hallo Welt!

Wir haben die JAR-Datei definiert, die in den build/bin-Ordner gelegt werden soll. Die Ordner werden während des Builds erstellt. Der Befehl ant jar ruft das Ziel jar in der build.xml auf.

Maven

Maven wurde entwickelt, um die Probleme beim Ant-basierten Scripting zu lösen. Es behielt die XML-Dateien bei, verfolgte jedoch einen anderen Ansatz für die Organisation. In Ant müssen Entwickler alle Aufgaben erstellen. Maven verringert die Aufgabenerstellung durch die Implementierung strengerer Standards für die Organisation von Code. Dadurch ist der Einstieg in Standardprojekte einfacher.

Es wurden auch Abhängigkeits-Downloads eingeführt, die die Entwicklung erleichterten. Vor der Einführung von Ivy in Ant mussten Benutzer Abhängigkeiten lokal verwalten. Maven übernahm zuerst die Dependency-Management-Philosophie.

Die strengen Standards von Maven machen es jedoch schwierig, benutzerdefinierte Build-Skripte zu schreiben. Das Tool ist einfach zu handhaben, solange das Projekt den strengen Standards entspricht.

Vorteile

  • Automatische Abhängigkeits-Downloads
  • Alle Abhängigkeiten werden automatisch in der Quellcodeverwaltung als Teil der Maven-Skripte aufgezeichnet
  • Standardisiert und vereinfacht den Build-Prozess
  • Einfache Integration mit IDEs und CI/CD-Systemen

Nachteile

  • Nicht flexibel bei der Erstellung benutzerdefinierter Workflows
  • Steile Lernkurve und der Prozess ist für Anfänger schwer zu verstehen
  • Zeitaufwändig bei der Lösung von Build-Problemen und neuen Bibliotheksintegrationen
  • Nicht gut mit mehreren Versionen derselben Abhängigkeit

Maven-Beispiel

Sie können den neuesten Maven herunterladen von Hier . Sie können die Installation wie folgt überprüfen:

$ mvn --version
Apache Maven 3.5.2(138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T00:58:13-07: 00)
Maven-Startseite: /Users/zak/BuildTools/Maven/apache-maven-3.5.2
Java-Version: 1.8.0_74, Anbieter: Oracle Corporation
Java-Startseite: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Inhalt/Startseite/jre
Standardgebietsschema: en_US, Plattformcodierung: UTF-8
Betriebssystemname:'Mac OS X', Ausführung:'10 .11.6 ', Bogen:'x86_64', Familie:'Mac'

Erstellen Sie einen helloworld-Ordner und generieren Sie ein Projekt mit dem folgenden Befehl:

$ mvn archetype:generate -DgroupId=com.Name der Firma.Hallo Welt-DartifactId=helloworld
-DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode =falsch

Es sollte die Ordnerstruktur erstellen und die Ausgabe generieren, die wie folgt aussieht:

[INFO] Suche nach Projekten...
[DIE INFO]
[DIE INFO] ----------------------------------------------- --------------------------
[INFO] Gebäude Maven Stub Projekt (kein POM) 1
[DIE INFO] ----------------------------------------------- --------------------------
[DIE INFO]
[INFO] >>> maven-archetype-plugin:3.0.0:generate (default-cli) > Generate-sources
@ 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-archetype-plugin:3.0.0:generate (default-cli) @ standalone-pom ---
[INFO] Projekt im Batch-Modus generieren
[DIE INFO] ----------------------------------------------- ------------------------------
[INFO] Verwenden der folgenden Parameter zum Erstellen eines Projekts aus einem alten (1.x) Archetyp:
Maven-Archetyp-Schnellstart: 1.0
[DIE INFO] ----------------------------------------------- ------------------------------
[INFO] Parameter: basedir, Wert: /Users/zak/_work/LearnBuildScripts/LearnMaven
[INFO] Parameter: Paket, Wert: com.firmenname.helloworld
[INFO] Parameter: groupId, Wert: com.companyname.helloworld
[INFO] Parameter: artifactId, Wert: helloworld
[INFO] Parameter: Paketname, Wert: com.firmenname.helloworld
[INFO] Parameter: Version, Wert: 1.0-SNAPSHOT
[INFO] Projekt erstellt aus Old (1.x) Archetype in dir: /Users/zak/_work/
LearnBuildScripts/LearnMaven/helloworld
[DIE INFO] ----------------------------------------------- --------------------------
[INFO] ERFOLG AUFBAUEN
[DIE INFO] ----------------------------------------------- --------------------------
[INFO] Gesamtzeit: 8.602 s
[INFO] Fertiggestellt am: 2018-01-27T00:05:37-08:00
[INFO] Endgültiger Speicher: 15M/152M
[DIE INFO] ----------------------------------------------- --------------------------

Die Ordnerstruktur sollte wie folgt aussehen:

Hallo Welt
|- pom.xml
``-- src
|-- hauptsächlich
| ``-Java
| ``-- mit
| ``-- Name der Firma
| ``-- Hallo Welt
| ``- App.java
``-Prüfung
``-Java
``-- mit
``-- Name der Firma
``-- Hallo Welt
``- AppTest.java

Die pom.xml enthält die Build-Konfigurationen. In der pom.xml sieht der Code so aus:

xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http://www.w3.org/2001/
XMLSchema-Instanz'
xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0
_0.xsd'>
>4.0.0>
>com.firmenname.helloworld>
>Hallo Welt>
>Krug>
>1.0-SCHNAPPSCHUSS>
>Hallo Welt>
>http://maven.apache.org>
>
>
>junit>
>junit>
>3.8.1>
>Prüfung>
>
>
>

Sie können die JAR-Datei mit dem folgenden Befehl generieren:

$ mvn-Paket

[INFO] Suche nach Projekten...
[DIE INFO]
[DIE INFO] ----------------------------------------------- --------------------------
[INFO] Bau von helloworld 1.0-SNAPSHOT
[DIE INFO] ----------------------------------------------- --------------------------
[DIE INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ helloworld ---
[WARNUNG] Verwenden der Plattformcodierung (eigentlich UTF-8), um gefilterte Ressourcen zu kopieren, d.h.
Build ist plattformabhängig!
[INFO] überspringen nicht vorhandenes Ressourcenverzeichnis /Users/zak/_work/LearnBuildScripts/LearnMaven/
halloworld/src/main/resources
[DIE INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ helloworld ---
[INFO] Änderungen erkannt - Modul neu kompilieren!
[WARNUNG] Die Dateicodierung wurde nicht festgelegt, wobei die Plattformcodierung UTF-8 verwendet wird, d. h. Build ist
Plattformabhängig!
[INFO] Kompilieren einer Quelldatei nach /Users/zak/_work/LearnBuildScripts/LearnMaven/
halloworld/target/classes
[DIE INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @
Hallo Welt ---
[WARNUNG] Verwenden der Plattformcodierung (eigentlich UTF-8), um gefilterte Ressourcen zu kopieren, d.h.
Build ist plattformabhängig!
[INFO] überspringen nicht vorhandenes Ressourcenverzeichnis /Users/zak/_work/LearnBuildScripts/LearnMaven/
halloworld/src/test/ressourcen
[DIE INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ helloworld ---
[INFO] Änderungen erkannt - Modul neu kompilieren!
[WARNUNG] Die Dateicodierung wurde nicht festgelegt, wobei die Plattformcodierung UTF-8 verwendet wird, d. h. Build ist
Plattformabhängig!
[INFO] Kompilieren einer Quelldatei nach /Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/target/test-classes
[DIE INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ helloworld ---
[INFO] Surefire-Berichtsverzeichnis: /Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/ziel/
todsichere Berichte

-------------------------------------------------- -----
T E S T S
-------------------------------------------------- -----
Ausführen von com.firmenname.helloworld.AppTest
Testlauf: 1, Fehler: 0, Fehler: 0, Übersprungen: 0, Verstrichene Zeit: 0,014 Sek.

Ergebnisse :

Testlauf: 1, Fehler: 0, Fehler: 0, Übersprungen: 0

[DIE INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ helloworld ---
[INFO] Baukasten: /Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
helloworld-1.0-SNAPSHOT.jar
[DIE INFO] ----------------------------------------------- --------------------------
[INFO] ERFOLG AUFBAUEN
[DIE INFO] ----------------------------------------------- --------------------------
[INFO] Gesamtzeit: 5.624 s
[INFO] Fertiggestellt am: 2018-01-27T00:11:10-08:00
[INFO] Endgültiger Speicher: 16M/114M
[DIE INFO] ----------------------------------------------- --------------------------

Sie können die JAR-Datei wie folgt ausführen:

$ java -cp target/helloworld-1.0-SCHNAPPSCHUSS.Krugmit.Name der Firma.Hallo Welt.App
Hallo Welt!

Die JAR-Datei wird im Zielordner abgelegt.

Gradle

Gradle kombiniert die Kraft von Ant und Maven. Die erste Version von Gradle wurde 2012 veröffentlicht. Sie wurde schnell angenommen. Google verwendet es derzeit für Android OS.

Anstelle von XML verwendet Gradle die Sprache Groovy. Dadurch sind Build-Skripte in Gradle einfacher zu schreiben und zu lesen. Ursprünglich wurde Ivy für das Abhängigkeitsmanagement verwendet, aber jetzt verwendet es seine eigene Abhängigkeits-Engine.

Vorteile

  • Bietet Standardisierung und bleibt dabei flexibel
  • Einfach zu lesende und zu schreibende Build-Skripte
  • Besser im Umgang mit mehreren Versionen von Abhängigkeiten
  • Kann mit mehreren Programmiersprachen und Technologien umgehen
  • Aktive Community, die bei der Entwicklung des Tools hilft
  • Gradle DSL (Domain-Specific Language) vereinfacht die Konfigurationsstruktur
  • Gradle bietet Leistungsverbesserungen durch inkrementelle, Build-Cache und den Gradle Daemon

Nachteile

  • IDE-Integration nicht so gut wie Maven

Gradle-Beispiel

Sie können Gradle installieren von Hier . Nachdem Sie Gradle in Ihrem Pfad eingerichtet haben, können Sie dies folgendermaßen überprüfen:

$ gradle--Ausführung

-------------------------------------------------- ----------
Gradle4.5
-------------------------------------------------- ----------

Bauzeit:2018-01-24 17: 04:52koordinierte Weltzeit
Revision: 77d0ec90636f43669dc794ca17ef80dd65457bec

Groovig: 2.4.12
Ameise: Apache Ant(TM)Version 1.9.9 kompiliert am Februar2 2017
JVM: 1.8.0_74(Oracle Corporation25,74-b02)
Betriebssystem: Mac OS X 10.11.6 x86_64

Erstellen Sie als Nächstes die folgende Verzeichnisstruktur:

Hallo Welt
| -bauen.gradle
``-src
| -hauptsächlich
``-Java
``-Hallo Welt
``-Hallo Welt.Java

Geben Sie für helloworld.java den Code aus dem Ant-Beispiel ein. Und für build.gradle geben Sie den folgenden Code ein:

Plugin anwenden: 'Java'

Ausführung= '1.0'

Repositorys{
mavenCentral()
}

Abhängigkeiten{
testCompile-Gruppe: 'junite', Name: 'junite', Ausführung: '4.12'
}

Sie können den Befehl Gradle Tasks –all verwenden, um alle verfügbaren Befehle anzuzeigen. Gradle greift automatisch die Plugins auf, die Sie in der Datei build.gradle angeben, und zeigt Ihnen die zusätzlichen Aufgaben an, die aufgrund der Plugins verfügbar sind.

Sie können den Build erhalten, indem Sie Folgendes ausführen:

$ Gradle-Glas

BAUEN ERFOLGREICH in 1s
2umsetzbare Aufgaben:2hingerichtet

Sie können Ihr Glas wie folgt ausführen:

$ java -cp build/libs/helloworld-1.0.KrugHallo Welt
Hallo Welt!

Die JAR-Datei wird im Ordner build/libs abgelegt.

Abschluss

Unter den Build-Tools kann Ant für kleinere Projekte nützlich sein, während Maven besser ist, um sicherzustellen, dass alle Entwickler die gleichen Regeln befolgen. Gradle ist das neueste Tool, das die größte Flexibilität bietet.

Verweise: