Использование 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 должен принять его безотказно.

Другие вопросы по тегам