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

时间:2017-10-12 15:19:58

标签: java java-9 modularity jigsaw

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

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

我应该在module-info.java中做些什么来启用我的第三方库?

2 个答案:

答案 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): -

  1. 执行jar工具

    的描述符命令
    jar --file=/path/to/your/jar/log4j-api-2.9.1.jar --describe-module
    

    这将为您提供类似于

    的输出
      

    找不到模块描述符。派生 automatic module

         

    log4j.api @ 2.9.1自动

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

    module your.module {
        requires log4j.api;
    }
    

    那就是它。