Плагин Gradle и Shadow - копировать дополнительные файлы (файлы.jar) в финальный jar после задачи shadowJar
Описание проблемы:
Я использую плагин Gradle Shade, все отлично работает и копирует файлы ресурсов в финальную банку. Однако, как говорят в документах, он не может включать другие .jar
файлы как ресурсы, потому что он не может отличить их от зависимостей. Он распаковывает их не в порядке.
Что я хочу сделать:
Я хочу скопировать дополнительные .jar
файлы из tools
папка (которая живет рядом с моей build.gradle
) в финал jar
произведено shadowJar
задача.
Вопрос:
Как продлить задачу (shadowJar
) скопировать дополнительные файлы в созданный файл jar.
1 ответ
Ответ на этот вопрос содержится в документации плагина Gradle shadow, раздел « Встраивание файлов Jar в ваш Shadow Jar» :
[...] shadow не может отличить файл jar, настроенный как зависимость, от файла jar, включенного в папку ресурсов. Это означает, что любой jar-файл, найденный в каталоге ресурсов, будет объединен с теневым jar-файлом так же, как и любая другая зависимость. Если вы намерены встроить банку внутрь, вы должны переименовать банку, чтобы она не заканчивалась на .jar, прежде чем начнется теневая задача.
К сожалению, это справедливо как для JAR-файла, который является частью конфигурации зависимостей, так и для копирования JAR-файла с использованием
from
копировать спецификацию (которая работает с тех пор, как
shadowJar
задача расширяет задачу; которая, в свою очередь, является задачей копирования и, следовательно, поддерживает спецификации копирования).
Таким образом, JAR можно встроить, только переименовав его. Если это должно быть названо
.jar
внутри Uber JAR я думаю, что единственный вариант — обходной путь из трех шагов:
- Создайте Uber JAR и вставьте JAR, переименовав их; например, используйте суффикс .
shadowJar
{
from("${dirThatContainsSomeJARs}")
{
include '*.jar'
rename '(.+).jar', '$1.zip'
}
}
- Распакуйте Uber JAR и переименуйте все JAR, которые были внедрены, как
*.zip
вернуться к*.jar
. - Переупакуйте все снова, используя
jar
или жеzip
задача.