Java

Ameise gegen Maven gegen Gradle

Ameise gegen Maven gegen Gradle

Auswahl des richtigen Build-Tools: Ant vs Maven vs Gradle

Während der Softwareentwicklung müssen Entwickler immer wieder den gleichen Code 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-Skripte 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 „antlibs“ 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

Nachteile

Ameise mit Efeu Beispiel

Sie können die neueste Ant von hier aus installieren. 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:

$ ant -version
Apache Ant(TM)-Version 1.10.1 zusammengestellt am 2. Februar 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 in den src-Ordner helloworld.Java-Datei mit dem Code:

/****************************
Druckt "Hallo Welt . aus!"
**************************/
öffentliche Klasse halloworld
public static void main(String[] args)
System.aus.println("Hallo Welt!");

Jetzt im helloworld-Ordner einen Build erstellen.xml-Datei mit folgendem Code:
























Und erstelle im selben helloworld-Ordner den Efeu.xml-Datei mit folgendem Code:






Die Verzeichnisstruktur sollte wie folgt aussehen:

Hallo Welt
|-- bauen.xml
|-- Efeu.xml
'-- src
'-- Hallo Welt.Java

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

$ Ameisenglas

Ein erfolgreicher Build sollte eine Ausgabe wie diese liefern:

$ Ameisenglas
Builddatei: /Users/zak/_work/LearnBuildScripts/LearnANT/helloworld/build.xml
Entschlossenheit:
[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
-Ameise-1.10.1/lib/ivy-2.4.0.Krug!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:retrieve] :: Abhängigkeiten auflösen :: org.apache#helloworld;[email protected]
MacBook Air.lokal
[ivy:retrieve]     confs: [default]
[ivy:retrieve]     gefunden junit#junit;4.12 in der Öffentlichkeit
[ivy:retrieve]     gefundene Organisation.hamcrest#hamcrest-core;1.3 in der Öffentlichkeit
[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: [default]
[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 auf build.sysclasspath=letzter; 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/
Hallo Welt.Krug
ERFOLGREICH AUFBAUEN
Gesamtzeit: 6 Sekunden

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

$ java -cp build/bin/helloworld.glas halloworld
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 jar-Ziel im Build auf.xml.

Maven

Maven wurde entwickelt, um die Probleme beim Ant-basierten Scripting zu lösen. Es behielt die XML-Dateien bei, verfolgte jedoch einen anderen Organisationsansatz. 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 hat zuerst die Dependency-Management-Philosophie übernommen.

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

Vorteile

Nachteile

Maven-Beispiel

Sie können den neuesten Maven hier herunterladen. 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/Home/jre
Standardgebietsschema: en_US, Plattformcodierung: UTF-8
Betriebssystemname: "mac os x", Version: "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.helloworld -DartifactId=helloworld
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

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) > Generier-Quellen
@ 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 Alt (1.x) Archetyp:
maven-archetype-schnellstart:1.0
[DIE INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Wert: /Users/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: artifactId, Wert: helloworld
[INFO] Parameter: Paketname, Wert: com.Name der Firma.Hallo Welt
[INFO] Parameter: Version, Wert: 1.0-SCHNAPPSCHUSS
[INFO] Projekt erstellt aus Alt (1.x) Archetyp im Verzeichnis: /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
|-- Hauptsache
| '--java
| '--com
| '-- Name der Firma
| '-- Hallo Welt
| '-- App.Java
'-- Prüfung
'--java
'--com
'-- Name der Firma
'-- Hallo Welt
'-- AppTest.Java

Die pom.xml enthält die Build-Konfigurationen. Innerhalb der pom.xml sieht der Code 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-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] Gebäude helloworld 1.0-SCHNAPPSCHUSS
[DIE INFO] ------------------------------------------------------------------------
[DIE INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ helloworld ---
[WARNUNG] Verwenden der Plattformcodierung (eigentlich UTF-8) zum Kopieren gefilterter Ressourcen, i.e.
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:kompilieren (Standardkompilieren) @ helloworld ---
[INFO] Änderungen erkannt - Modul neu kompilieren!
[WARNUNG] Die Dateicodierung wurde nicht eingestellt, die Plattformcodierung UTF-8 verwendet, d. h.e. bauen 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) zum Kopieren gefilterter Ressourcen, i.e.
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 eingestellt, die Plattformcodierung UTF-8 verwendet, d. h.e. bauen 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 (Standardtest) @ helloworld ---
[INFO] Surefire-Berichtsverzeichnis: /Users/zak/_work/LearnBuildScripts/LearnMaven
/helloworld/ziel/
todsichere Berichte
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Laufcom.Name der Firma.Hallo Welt.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 (Standard-jar) @ helloworld ---
[INFO] Baukasten: /Users/zak/_work/LearnBuildScripts/LearnMaven/helloworld/target/
halloworld-1.0-SCHNAPPSCHUSS.Krug
[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 Ziel/helloworld-1.0-SCHNAPPSCHUSS.glas com.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. Es hat eine schnelle Akzeptanz erfahren. 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. Es verwendete ursprünglich Ivy für das Abhängigkeitsmanagement, verwendet jetzt jedoch seine eigene Abhängigkeits-Engine engine.

Vorteile

Nachteile

Gradle-Beispiel

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

$gradle --version
------------------------------------------------------------
Grad 4.5
------------------------------------------------------------
Bauzeit:   2018-01-24 17:04:52 UTC
Überarbeitung:     77d0ec90636f43669dc794ca17ef80dd65457bec
Groovig:       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)
Betriebssystem:           Mac OS X 10.11.6 x86_64

Erstellen Sie als Nächstes die folgende Verzeichnisstruktur:

Hallo Welt
|-- bauen.gradle
'-- src
|-- Hauptsache
'--java
'-- Hallo Welt
'-- Hallo Welt.Java

Für die halloworld.Java habe den Code aus dem Ant-Beispiel eingefügt. Und zum bauen.gradle gibt folgenden Code ein:

Plugin anwenden: 'java'
Version = '1.0'
Repositorys
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 anzuzeigen. Gradle nimmt automatisch die Plugins auf, die Sie im Build angeben.gradle-Datei und zeigt Ihnen die zusätzlichen Aufgaben, die aufgrund der Plugins verfügbar sind.

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

$ Gradle-Glas
ERFOLGREICH AUFBAUEN in 1s
2 umsetzbare Aufgaben: 2 ausgeführt

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

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

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

Fazit

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:

Open-Source-Ports kommerzieller Spiele-Engines
Kostenlose, quelloffene und plattformübergreifende Spiel-Engine-Nachbildungen können verwendet werden, um sowohl alte als auch einige der relativ neue...
Beste Befehlszeilenspiele für Linux
Die Befehlszeile ist nicht nur Ihr größter Verbündeter bei der Verwendung von Linux – sie kann auch eine Quelle der Unterhaltung sein, da Sie damit vi...
Beste Gamepad-Mapping-Apps für Linux
Wenn du Spiele unter Linux gerne mit einem Gamepad statt mit einem typischen Tastatur- und Maus-Eingabesystem spielst, gibt es einige nützliche Apps f...