Erstellen eines Fat Jar in Gradle

Dieser Artikel ist Teil einer Reihe: • Einführung in Gradle

• Ameise gegen Maven gegen Gradle

• Schreiben von benutzerdefinierten Gradle-Plugins

• Erstellen eines Fat Jar in Gradle (aktueller Artikel)

1. Übersicht

In diesem kurzen Artikel behandeln wir die Erstellung eines „fetten Glases“ in Gradle.

Grundsätzlich ist ein Fat Jar (auch als Uber-Jar bekannt) ein autarkes Archiv, das sowohl Klassen als auch Abhängigkeiten enthält, die zum Ausführen einer Anwendung erforderlich sind.

2. Ersteinrichtung

Beginnen wir mit einer einfachen build.gradle- Datei für ein Java-Projekt mit zwei Abhängigkeiten:

apply plugin: 'java' repositories { mavenCentral() } dependencies { compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25' compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25' }

3. Verwenden der Jar-Aufgabe aus dem Java-Plugin

Beginnen wir mit dem Ändern der JAR- Aufgabe über das Java Gradle-Plugin. Standardmäßig werden bei dieser Aufgabe Gläser ohne Abhängigkeiten erstellt.

Wir können dieses Verhalten überschreiben, indem wir einige Codezeilen hinzufügen. Wir brauchen zwei Dinge, damit es funktioniert:

  • ein Main-Class - Attribut in der Manifest - Datei
  • Abhängigkeitsgläser einschließen

Fügen wir der Gradle-Aufgabe einige Änderungen hinzu:

jar { manifest { attributes "Main-Class": "com.baeldung.fatjar.Application" } from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } }

4. Erstellen einer separaten Aufgabe

Wenn wir die ursprüngliche JAR-Aufgabe so lassen möchten, wie sie ist, können wir eine separate erstellen, die den gleichen Job erledigt.

Der folgende Code fügt eine neue Aufgabe namens customFatJar hinzu:

task customFatJar(type: Jar) { manifest { attributes 'Main-Class': 'com.baeldung.fatjar.Application' } baseName = 'all-in-one-jar' from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } with jar }

5. Verwenden dedizierter Plugins

Wir können auch vorhandene Gradle-Plugins verwenden, um ein Fettglas zu erstellen.

In diesem Beispiel verwenden wir das Shadow-Plugin:

buildscript { repositories { jcenter() } dependencies { classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.1' } } apply plugin: 'java' apply plugin: 'com.github.johnrengelman.shadow'

Sobald wir das Shadow-Plugin anwenden, ist die ShadowJar- Task einsatzbereit.

6. Fazit

In diesem Tutorial haben wir einige verschiedene Möglichkeiten vorgestellt, wie Sie in Gradle fette Gläser herstellen können. Wir haben die Standard-JAR-Aufgabe überschrieben, eine separate Aufgabe erstellt und das Schatten-Plugin verwendet.

Welcher Ansatz wird empfohlen? Die Antwort lautet - es kommt darauf an.

In einfachen Projekten reicht es aus, die Standard-JAR-Aufgabe zu überschreiben oder eine neue zu erstellen. Da das Projekt wächst, empfehlen wir dringend, Plugins zu verwenden, da diese bereits schwierigere Probleme wie Konflikte mit externen META-INF-Dateien gelöst haben.

Wie immer finden Sie die vollständige Implementierung dieses Tutorials auf GitHub.

« Vorheriges Schreiben von benutzerdefinierten Gradle-Plugins