Je suis novice Gradle. Je veux construire un uberjar (AKA fatjar) qui inclut toutes les dépendances transitives du projet. Quelles lignes dois-je ajouter à mon "build.gradle"?
Voici ce que j'ai actuellement: (Je l'ai copié quelque part il y a quelques jours, mais ne me souviens pas d'où.)
task uberjar(type: Jar) {
from files(sourceSets.main.output.classesDir)
manifest {
attributes 'Implementation-Title': 'Foobar',
'Implementation-Version': version,
'Built-By': System.getProperty('user.name'),
'Built-Date': new Date(),
'Built-JDK': System.getProperty('Java.version'),
'Main-Class': mainClassName
}
}
Avez-vous essayé l'exemple fatjar dans le gradle cookbook ?
Ce que vous cherchez est le plugin shadow pour gradle
J'ai remplacé le task uberjar(..
avec les éléments suivants:
jar {
from(configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }) {
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
}
manifest {
attributes 'Implementation-Title': 'Foobar',
'Implementation-Version': version,
'Built-By': System.getProperty('user.name'),
'Built-Date': new Date(),
'Built-JDK': System.getProperty('Java.version'),
'Main-Class': mainClassName
}
}
Les exclusions sont nécessaires car en leur absence vous frapperez this issue.
Ajoutez simplement ceci à votre Java.
mainClassName = "my.main.Class"
jar {
manifest {
attributes "Main-Class": "$mainClassName"
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
Cela se traduira par le fichier [nom_module]/build/libs/[nom_module] .jar.
J'ai trouvé cela projet très utile. En l'utilisant comme référence, ma tâche uberjar Gradle serait
task uberjar(type: Jar, dependsOn: [':compileJava', ':processResources']) {
from files(sourceSets.main.output.classesDir)
from configurations.runtime.asFileTree.files.collect { zipTree(it) }
manifest {
attributes 'Main-Class': 'SomeClass'
}
}