Wie andere angemerkt haben, muss der Einstiegspunkt der Anwendung im Main-ClassAttribut der Manifestdatei festgelegt werden, damit eine JAR-Datei ausführbar ist . Wenn die Abhängigkeitsklassendateien nicht zusammengestellt werden, müssen sie im Class-PathEintrag 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 /libund fügen Sie alle Abhängigkeiten zum Class-PathEintrag 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/distributionsund 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