Il y a beaucoup de réponses répétées sur la façon d'exclure un fichier individuel d'un fatJar. En général, les fichiers exclus se trouvent dans META-INF et sont exclus soit à cause d'un conflit de noms de fichiers, soit parce qu'il s'agit d'une signature copiée d'un fichier Jar libarar dépendant qui n'est pas valide pour le fichier Jar nouvellement créé.
Exemple pour maven : Comment puis-je savoir quel jar signé provoque l'échec de maven-shade-plugin ?
Exemple pour gradle : Suppression des signatures de jar dans la construction Gradle
Ces solutions ne supprimaient toutefois que le fichier incriminé individuellement.
Comment faire en sorte qu'un fatJar soit exclu d'une bibliothèque de dépendances spécifique (pas des fichiers individuels de cette bibliothèque) ?
Par exemple, dans la question 36226033 il est facile d'exclure la signature copiée depuis BouncyCastle, mais existe-t-il un moyen d'exclure la bibliothèque de dépendances bcprov-jdk15on-*.jar
entièrement, de sorte que l'utilisateur doit disposer de la bibliothèque afin d'exécuter le fat Jar généré ?
Il est prouvé que cela ne fonctionne pas :
task fatJar(type: Jar) {
manifest {
attributes 'Implementation-Title': 'Gradle Jar File Example',
'Implementation-Version': version,
'Main-Class': 'com.alphawallet.scripttool.Main'
}
baseName = project.name + '-all'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
exclude('**/bcprov-jdk15on-1.62.jar')
with jar
}
Con exclude('**/bcprov-jdk15on-1.62.jar')
le contenu de ce fichier jar est toujours copié sur le gros jar généré.
Merci. La motivation est d'envoyer mon application Java à des systèmes qui fournissent leur propre bibliothèque de sécurité BouncyCastle (par exemple Debian Linux), au lieu d'incorporer une copie non signée de cette bibliothèque de sécurité.