Как использовать стороннюю библиотеку в модуле Java9?
У меня есть модуль java9, который использует стороннюю библиотеку, которая не является модулем Java9, а просто простой утилитой jar.
Однако компилятор жалуется, что не может найти пакет из моей утилиты.
Что я должен сделать в module-info.java
, чтобы включить использование моей сторонней библиотеки?
2 ответа:
Вы можете использовать вашу библиотеку какавтоматический модуль . Автоматический модуль-это модуль, который не имеет дескриптора модуля (т. е.
module-info.class
). Но какое имя следует использовать для обозначения этого модуля? Имя автоматического модуля является производным от имени JAR (если только этот JAR не содержит атрибутAutomatic-Module-Name
). Полное правило довольно длинное (см. Javadoc дляModuleFinder.of
), поэтому для простоты вам просто нужно удалить версию из ее имени, а затем заменить все не буквенно-цифровые символы точками (.
).Например, если вы хотите использовать
foo-bar-1.2.3-SNAPSHOT.jar
, вам нужно добавить следующую строку вmodule-info.java
:module <name> { requires foo.bar; }
Просто чтобы сделать простые шаги, используйте стороннюю банку (например,
log4j-api-2.9.1.jar
ниже) в вашем модуле: -
Выполните команду дескриптора
jar
инструментjar --file=/path/to/your/jar/log4j-api-2.9.1.jar --describe-module
Это даст вам результат, подобный
Дескриптор модуля не найден. Производные автоматический модуль.
Log4j. api @2.9.1 automatic
В вашем
module-info.java
объявите имя модуляrequires
как: -module your.module { requires log4j.api; }
Вот и все.