Функция jlink в Java позволяет вам создать отдельную среду выполнения для приложения.Как правило, все модули, необходимые для этого приложения, объединены в один большой файл «модулей» с помощью jlink.
Мне интересно узнать, есть ли способ исключить некоторые из модулей, чтобы они были отдельными файлами jar, но чтобы jlink мог их найти и запустить приложение.Есть ли способ сделать это?
Один из случаев использования этого, например, если вы имеете дело с библиотекой LGPL.Возможно, вы захотите, чтобы библиотека LGPL была исключена из гигантского «блоба» модулей и оставлена как отдельный jar, так что кто-то, желающий обменять jar на другую версию / настроенную версию, может (что требуется LGPL).
В Jlink есть оператор «статический запрос», который можно использовать для запроса дополнительного модуля.Я полагал, что использование этого может работать, но у меня были проблемы с этим.
Когда я компилирую проект с использованием static, я смог запустить его, включив модули с помощью переключателя «--add-modules» в java.Однако, как только я запустил на нем jlink для создания собственного изображения, я не смог заставить это работать.
Когда я пытаюсь запустить jlinked-проект, я получаю исключения ClassNotFound.
Когда вы запускаете jlink для проекта, он создает собственный образ времени выполнения.Все основные модули проекта помещаются в файл образа, называемый модулями.Я проверил этот файл изображения с помощью команды jimage, и я подтвердил, что этот файл изображения не содержит модули, которые я объявил как статические.
В jlink я попытался поместить файлы jarиз модулей, которые были объявлены статически в каталог с изображением модулей.Затем я пытаюсь использовать «--add-modules», чтобы добавить модули вручную, а также -p и -cp, чтобы указать каталог с jar-файлами, но я все еще получаю исключение ClassNotFound.