Как использовать стороннюю библиотеку в модуле Java9?


У меня есть модуль java9, который использует стороннюю библиотеку, которая не является модулем Java9, а просто простой утилитой jar.

Однако компилятор жалуется, что не может найти пакет из моей утилиты.

Что я должен сделать в module-info.java, чтобы включить использование моей сторонней библиотеки?

2 7

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 ниже) в вашем модуле: -

  1. Выполните команду дескриптора jar инструмент

    jar --file=/path/to/your/jar/log4j-api-2.9.1.jar --describe-module
    

    Это даст вам результат, подобный

    Дескриптор модуля не найден. Производные автоматический модуль.

    Log4j. api @2.9.1 automatic

  2. В вашем module-info.java объявите имя модуля requires как: -

    module your.module {
        requires log4j.api;
    }
    

    Вот и все.