Я пытаюсь найти способ создать архив, который будет содержать исполняемый файл jar для приложения Java (Spring Boot), а также вспомогательные артефакты, такие как скрипт для запуска jar и, возможно, другие связанные ресурсы. Кстати, я использую Maven для процесса сборки.
Я не слишком знаком с тем, что делает исполняемый файл jar «исполняемым», а также то, что такой файл может фактически содержать, или как он «используется» Java время выполнения. Под этим я подразумеваю, что кажется, что вспомогательные ресурсы (файлы конфигурации и т. Д. c.) Каким-то образом связаны внутри jar-файла, и все же, когда они выполняются, эти ресурсы «видны» jar / runtime.
Быстрый поиск показывает ряд методов для создания исполняемого фляги, и я попробовал несколько методов. Хороший пример на эту тему приведен здесь: https://www.baeldung.com/executable-jar-with-maven.
Хотя они и создают исполняемый файл jar, я не могу понять, как также упаковать jar с помощью скрипта и / или другие ресурсы.
Вот методы, которые я пробовал (до сих пор):
spring-boot-maven-plugin:
Поскольку мое приложение написано как приложение Spring Boot, имеет смысл использовать этот плагин. Цель repackage
может использоваться для «перепаковки» банки в качестве исполняемой. Замечательно (и это прекрасно работает). Но это все, что делает этот плагин. Похоже, что он не обеспечивает возможность создания пакета, поддерживающего файлы сценариев / ресурсов.
Я могу использовать свой сценарий запуска для запуска jar-файла и передачи любых необходимых ему аргументов. Тем не менее, мне нужно упаковать скрипт и банку вместе, и я не думаю, что этот плагин может сделать это.
maven-assembly-plugin:
Перед экспериментом Создавая исполняемый jar, я использовал плагин сборки для создания архива (zip), который содержал «простой» jar приложения, каталог lib
со всеми зависимостями, а также поддерживающие артефакты: скрипт запуска, файлы конфигурации и т. д. c.
Плагин также имеет возможность создавать исполняемый файл jar, определяя <archive>
в конфигурации плагина. Я экспериментировал с этим, и он действительно создает jar, который, по-видимому, связывает jar приложения, зависимости и также копирует большинство (но не все) связанных артефактов, которые я указал в сборке. xml. Они были помещены в каталог BOOT-INF/classes
. Как ни странно, он не скопировал в скрипт запуска. Дело в том, что даже если бы он скопировал скрипт, как бы я его использовал? Он похоронен внутри файла jar!
Я не могу понять, есть ли способ включить исполняемый jar в zip, чтобы заменить «обычный» jar и каталог lib
.
После этих двух попыток я подумал, что, возможно, я мог бы использовать плагин весенней загрузки для создания исполняемого jar, а затем просто собрать плагин сборки с файлами поддержки. Однако это не работает, потому что плагин сборки вызывается перед плагином начальной загрузки в порядке сборки maven.
Есть идеи? Предложения