Использование jlink с автоматическими модулями
Наличие явного модульного проекта, который зависит от автоматического модуля, например, от java.activation. Можно ли по-прежнему использовать jlink?
Смотрите этот модуль-info.java:
module hello {
requires java.activation;
}
Тогда Jlink не может добавить модуль:
$ jlink --module-path target/modules --add-modules hello --output target/jlink
Error: automatic module cannot be used with jlink: java.activation from file:///C:/Development/jlinkExample/target/modules/javax.activation-api-1.2.0.jar
Насколько я понимаю, автоматический модуль в любом случае будет содержать весь путь к классам, так что я думаю, что не будет никакой пользы в создании образа времени выполнения с помощью jlink? Смотрите также: Что такое автоматический модуль?
Есть ли возможность обойти эту проблему, возможно, сгенерировав информацию о модуле для этих зависимостей?
0 ответов
Насколько я понимаю, автоматический модуль в любом случае будет содержать весь путь к классам, поэтому я предполагаю, что не будет никакой пользы от создания образа времени выполнения с помощью jlink?
Нет, автоматические модули не будут содержать весь путь к классам. Фактически, артефакты, которые явно не определены как модули (содержатmodule-info.java
), но находятся в пути к модулю, рассматриваются как автоматические модули, чтобы преодолеть разрыв между явными модулями и кодом пути к классам.
Есть ли какие-нибудь возможности обойти эту проблему, возможно, создать информацию о модуле для этих зависимостей?
Да, вы можете создатьmodule-info.java
с участием jdeps
или используйте плагины, такие как moditect, для генерации информации о модуле и вставки ее в существующий JAR.
Как только артефакт (JAR) имеет явное объявление модуля, jlink
должен принять его безотказно.