我正在使用插件的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
。我得到的错误也不同。
答案 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
。