我有一些java9模块使用的第三方库不是Java9模块,只是一个简单的实用工具罐。
但是,编译器抱怨它无法从我的实用程序中找到一个包。
我应该在module-info.java
中做些什么来启用我的第三方库?
答案 0 :(得分:14)
您可以将库用作自动模块。自动模块是没有模块描述符(即module-info.class
)的模块。但是你应该使用什么名称来引用这个模块?自动模块的名称是从JAR名称派生的(除非此JAR包含Automatic-Module-Name
属性)。完整规则很长(请参阅ModuleFinder.of
的Javadoc),因此为简单起见,您只需从其名称中删除该版本,然后用点(.
)替换所有非字母数字字符。 / p>
例如,如果您要使用foo-bar-1.2.3-SNAPSHOT.jar
,则需要将以下行添加到module-info.java
:
module <name> {
requires foo.bar;
}
答案 1 :(得分:8)
只需简单的步骤,在您的模块中使用第三方jar(例如下面的log4j-api-2.9.1.jar
): -
执行jar
工具
jar --file=/path/to/your/jar/log4j-api-2.9.1.jar --describe-module
这将为您提供类似于
的输出找不到模块描述符。派生 automatic module 。
log4j.api @ 2.9.1自动
在module-info.java
中,将该模块名称的requires
声明为: -
module your.module {
requires log4j.api;
}
那就是它。