Существует множество повторных ответов о том, как исключить отдельный файл из fatJar. Как правило, исключаемый файл находится в META-INF и исключается либо из-за конфликта имен файлов, либо из-за того, что это подпись, скопированная из файла Jar зависимого libarar, который недопустим для вновь созданного файла Jar.
Пример для maven: Как определить, какой подписанный jar вызывает сбой maven-shade-plugin?
Пример для gradle: Удаление подписей Jar в Gradle Build
Эти решения, однако, только удаляли нарушающий файл по отдельности.
Как мы можем сделать fatJar с указанной библиотекой зависимостей c (не отдельными файлами в этой библиотеке ) исключен?
Например, в вопросе 36226033 легко исключить подпись, скопированную из BouncyCastle, но есть ли способ полностью исключить библиотеку зависимостей bcprov-jdk15on-*.jar
, чтобы пользователь должен иметь библиотеку, доступную для выполнения сгенерированного жирного Jar?
Доказано, что это не работает:
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
}
С exclude('**/bcprov-jdk15on-1.62.jar')
содержимое этого файла JAR по-прежнему скопировал в сгенерированный жирный кувшин.
Спасибо. Мотивация - отправлять мое приложение Java в системы, которые предоставляют собственную библиотеку безопасности BouncyCastle (например, Debian Linux), вместо встраивания неподписанной копии этой библиотеки безопасности.