如何在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
): –
-
执行
jar
工具的描述符命令jar --file=/path/to/your/jar/log4j-api-2.9.1.jar --describe-module
这将为您提供类似的输出
找不到模块描述符。 派生自动模块 。
log4j.api @ 2.9.1自动
-
在您的
module-info.java
,声明对该模块名称的requires
为: –module your.module { requires log4j.api; }
而已。