Wie andere angemerkt haben, muss der Einstiegspunkt der Anwendung im Main-Class
Attribut der Manifestdatei festgelegt werden, damit eine JAR-Datei ausführbar ist . Wenn die Abhängigkeitsklassendateien nicht zusammengestellt werden, müssen sie im Class-Path
Eintrag der Manifestdatei festgelegt werden.
Ich habe alle Arten von Plugin-Kombinationen ausprobiert und was nicht für die einfache Aufgabe, ein ausführbares JAR zu erstellen und irgendwie die Abhängigkeiten einzuschließen. Alle Plugins scheinen auf die eine oder andere Weise zu fehlen, aber schließlich habe ich es so bekommen, wie ich es wollte. Keine mysteriösen Skripte, keine Millionen verschiedener Mini-Dateien, die das Build-Verzeichnis verschmutzen, eine ziemlich saubere Build-Skript-Datei und vor allem: Nicht eine Million ausländischer Klassendateien von Drittanbietern, die in meinem JAR-Archiv zusammengeführt wurden.
Das Folgende ist ein Kopieren und Einfügen von hier für Ihre Bequemlichkeit.
[How-to] Erstellen Sie eine Distributions-Zip-Datei mit Abhängigkeitsgläsern im Unterverzeichnis /lib
und fügen Sie alle Abhängigkeiten zum Class-Path
Eintrag in der Manifestdatei hinzu:
apply plugin: 'java'
apply plugin: 'java-library-distribution'
repositories {
mavenCentral()
}
dependencies {
compile 'org.apache.commons:commons-lang3:3.3.2'
}
// Task "distZip" added by plugin "java-library-distribution":
distZip.shouldRunAfter(build)
jar {
// Keep jar clean:
exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/*.MF'
manifest {
attributes 'Main-Class': 'com.somepackage.MainClass',
'Class-Path': configurations.runtime.files.collect { "lib/$it.name" }.join(' ')
}
// How-to add class path:
// /programming/22659463/add-classpath-in-manifest-using-gradle
// https://gist.github.com/simon04/6865179
}
Hosted als Kern hier .
Das Ergebnis finden Sie in build/distributions
und der entpackte Inhalt sieht folgendermaßen aus:
lib / commons-lang3-3.3.2.jar
MyJarFile.jar
Inhalt von MyJarFile.jar#META-INF/MANIFEST.mf
:
Manifest-Version: 1.0
Hauptklasse: com.somepackage.MainClass
Klassenpfad: lib / commons-lang3-3.3.2.jar