Comme d'autres l'ont noté, pour qu'un fichier jar soit exécutable, le point d'entrée de l'application doit être défini dans l' Main-Class
attribut du fichier manifeste. Si les fichiers de classe de dépendance ne sont pas colocalisés, ils doivent être définis dans l' Class-Path
entrée du fichier manifeste.
J'ai essayé toutes sortes de combinaisons de plugins et ce qui ne l'est pas pour la simple tâche de créer un fichier exécutable et, d'une manière ou d'une autre, d'inclure les dépendances. Tous les plugins semblent manquer d'une manière ou d'une autre, mais finalement je l'ai eu comme je le voulais. Pas de scripts mystérieux, pas un million de mini-fichiers différents polluant le répertoire de construction, un fichier de script de construction assez propre, et surtout: pas un million de fichiers de classe tiers étrangers fusionnés dans mon archive jar.
Ce qui suit est un copier-coller à partir d' ici pour votre commodité.
[Comment] créer un fichier zip de distribution avec des jars de dépendances dans le sous /lib
- répertoire et ajouter toutes les dépendances à l' Class-Path
entrée dans le fichier manifeste:
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
}
Hébergé comme un essentiel ici .
Le résultat peut être trouvé dans build/distributions
et le contenu décompressé ressemble à ceci:
lib / commons-lang3-3.3.2.jar
MyJarFile.jar
Contenu de MyJarFile.jar#META-INF/MANIFEST.mf
:
Version du manifeste: 1.0
Classe principale: com.somepackage.MainClass
Chemin de classe: lib / commons-lang3-3.3.2.jar