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

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

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

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

您可以将库用作自动模块 。 自动模块是没有模块描述符的模块(即module-info.class )。 但是你应该使用什么名称来引用这个模块? 自动模块的名称源自JAR名称(除非此JAR包含Automatic-Module-Name属性)。 完整规则很长(请参阅ModuleFinder.of Javadoc),因此为简单起见,您只需从其名称中删除该版本,然后用点( . )替换所有非字母数字字符。

例如,如果要使用foo-bar-1.2.3-SNAPSHOT.jar ,则需要module-info.java添加到module-info.java

 module  { requires foo.bar; } 

只需简单的步骤,在您的模块中使用第三方jar(例如下面的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自动

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

     module your.module { requires log4j.api; } 

    而已。