module-info.java编译失败,使用maven-compiler-plugin和自动模块

时间:2017-10-23 00:58:35

标签: java maven java-9 java-module module-info

我正在使用插件的v3.7.0和JDK 9.0.1。我添加了两个requires语句,每个语句都引用类路径中的jar(自动模块)。在将jar移动到Modulepath之后,module-info.java在Eclipse中成功编译。但是,Maven给了我一个编译器错误,说其中一个丢失了(奇怪的是,不是第一个只是前一行)。我试图检查自动模块名称但是我从这个jar的命令中得到一个错误。这个错误是什么意思,我该如何修复它以便我能找到正确的模块名称?

我在下面的输出中替换了我的用户名。有问题的jar确实使用了ServiceLoader,但没有用Java 9编译。

computerName:Commander-java username$ jar --file=/Users/username/.m2/repository/com/username/rcf/1.0/rcf-1.0.jar --describe-module
Unable to derive module descriptor for: /Users/username/.m2/repository/com/username/rcf/1.0/rcf-1.0.jar
Provider class com.username.rcf.server.TestCmdChain not in module

computerName:Commander-java username$ java -p /Users/username/.m2/repository/com/username/rcf/1.0/rcf-1.0.jar --list-modules
Error occurred during initialization of boot layer
java.lang.module.FindException: Unable to derive module descriptor for /Users/username/.m2/repository/com/username/rcf/1.0/rcf-1.0.jar
Caused by: java.lang.module.InvalidModuleDescriptorException: Provider class com.username.rcf.server.TestCmdChain not in module

How to deal with java keywords in auto generated module names in Java 9?中的答案与在模块名称中使用Java标识符有不同的错误。我的模块的自动jar名称应该是rcf,因为jar名称是rcf-1.0.jar。我得到的错误也不同。

1 个答案:

答案 0 :(得分:4)

  

在导出模块描述时,任何内容   META-INF/services个配置文件映射到provides   声明。

为服务扫描的包是包含类文件的包。

此外,各个类的包名称是从其完全限定名称派生的。从共享日志com.username.rcf.server应该是要提供的服务的预期包名称,这将变为

provides x.y.z.TestCmdChainInterface with com.username.rcf.server.TestCmdChain

似乎模块中没有此类软件包com.username.rcf.server