Fat Jar in Gradle erstellen

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.