Erstellen eines fetten Glases in Gradle
1. Überblick
In diesem kurzen Artikel behandeln wir die Erstellung eines "Fettglases" in Gradle.
Grundsätzlicha fat jar (also known as uber-jar) is a self-sufficient archive which contains both classes and dependencies needed to run an application.
2. Ersteinrichtung
Beginnen wir mit einer einfachenbuild.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 derjar-Aufgabe über das Java Gradle-Plugin. Standardmäßig werden mit dieser Task 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:
-
einMain-Class-Attribut in der Manifestdatei
-
Abhängigkeiten einbeziehen
Fügen wir der Gradle-Aufgabe einige Änderungen hinzu:
jar {
manifest {
attributes "Main-Class": "com.example.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 Aufgabe erstellen, die den gleichen Job ausführt.
Der folgende Code fügt eine neue Aufgabe mit dem NamencustomFatJar: hinzu
task customFatJar(type: Jar) {
manifest {
attributes 'Main-Class': 'com.example.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 fettes Glas zu bauen.
In diesem Beispiel verwenden wir das PluginShadow:
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 AufgabeshadowJareinsatzbereit.
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 ist - es kommt darauf an.
In einfachen Projekten reicht es aus, die Standard-JAR-Aufgabe zu überschreiben oder eine neue zu erstellen. Da das Projekt jedoch wächst, empfehlen wir dringend die Verwendung von Plugins, da sie bereits schwierigere Probleme wie Konflikte mit externen META-INF-Dateien gelöst haben.
Wie immer finden Sie die vollständige Implementierung dieses Tutorials inover on GitHub.