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

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

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

我应该如何启用我的第三方库的使用?module-info.java


答案 1

您可以将库用作自动模块。自动模块是没有模块描述符(即 )的模块。module-info.class

但是,您需要指定什么名称才能引用自动模块?自动模块的名称派生自 JAR 名称(除非此 JAR 包含属性)。完整的规则很长(参见 ModuleFinder.of 的 Javadoc),所以为了简单起见,你只需要从其名称中删除版本,然后用点 () 替换所有非字母数字字符。Automatic-Module-Name.

例如,如果要使用 ,则需要将以下行添加到:foo-bar-1.2.3-SNAPSHOT.jarmodule-info.java

module <name> {
    requires foo.bar;
}

答案 2

要将其简单化,请使用第三方罐(例如 下面)在您的模块中:-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. 在模块描述符文件中,将 a 声明为该模块名称为:-requires

     module your.module {
         requires log4j.api;
     }
    

就是这样。


推荐