如何在Java9模块中使用第三方库?

igr*_*igr 13 java modularity java-platform-module-system java-9

我有一些java9模块使用的第三方库不是Java9模块,只是一个简单的实用工具jar.

但是,编译器抱怨它无法从我的实用程序中找到包.

我应该怎么做module-info.java才能使用我的第三方库?

Zhe*_*lov 16

您可以将库用作自动模块.自动模块是没有模块描述符(即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;
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!有趣的是我做到了,但我的IntelliJ仍在抱怨.在重新启动IDEA后,没有更多问题.感谢名单! (2认同)

Nam*_*man 8

只需简单的步骤,log4j-api-2.9.1.jar在您的模块中使用第三方jar(例如下面): -

  1. 执行jar工具的描述符命令

    jar --file=/path/to/your/jar/log4j-api-2.9.1.jar --describe-module
    
    Run Code Online (Sandbox Code Playgroud)

    这将为您提供类似的输出

    找不到模块描述符.派生自动模块.

    log4j.api @ 2.9.1自动

  2. 在您的module-info.java声明中requires,将该模块名称声明为: -

    module your.module {
        requires log4j.api;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    而已.