Сторонние модули java 9 работают с IDE, но не с jlink

Программа на основе JDK 9(JPMS), с использованием некоторых сторонних jar-файлов, таких как Apache (poi-3.17.jar, commons-io-2.6.jar) и HikariCP (HikariCP-3.1.0.jar), при использовании IDE(Intellij) Я их "требую" и программа работает нормально. Когда я пытаюсь получить свою привычную JRE, используя java9 'jlink', я получаю следующее:

/out$ jlink --module-path production --add-modules  
studyModule,java.base,java.datatransfer,java.desktop,java.logging,
java.scripting,java.sql,java.xml,java.prefs,javafx.base,
javafx.controls,javafx.fxml,javafx.graphics,javafx.media,
javafx.swing,javafx.web,jdk.jsobject,jdk.xml.dom,jdk.unsupported 
--output studyJre
Error: module-info.class not found for com.zaxxer.hikari module

/out$ jlink --module-path production --add-modules   
studyModule,java.base,java.datatransfer,java.desktop,java.logging,   
java.scripting,java.sql,java.xml,java.prefs,javafx.base,
javafx.controls,javafx.fxml,javafx.graphics,javafx.media,
javafx.swing,javafx.web,jdk.jsobject,jdk.xml.dom,jdk.unsupported 
--output studyJre
Error: module-info.class not found for poi module

Вопрос в том, почему эти пакеты с IDE работают нормально? если они не были модифицированы, то не должны работать и в IDE.

PS: я добавил эти jar-файлы в корневую папку при работе с jlink.

1 ответ

Решение

Помни что jlink это нестандартный инструмент, и он не должен следовать тем же правилам, что и классическая Java. Одно из его отличий заключается в том, что все модули должны быть явными (т.е. иметь module-info.class). Автоматические модули не поддерживаются. Если вы хотите создать собственный образ среды выполнения, вам нужно преобразовать все автоматические модули в явные. Посмотрите, например, этот вопрос, чтобы узнать, как этого добиться.

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