我根据需要使用插件的v3.7.0和JDK9.0.1。我添加了两个requires语句,每个语句都指向类路径中的一个jar (自动模块)。在我将jars移到Modulepath之后,这个模块-info.java在Eclipse中成功编译。但是,Maven给出了一个编译器错误,其中一个错误是其中一个丢失了(奇怪的是,这不是第一个之前的一行)。我试着检查自动模块名,但是我只从这个jar命令中得到了一个错误。这个错误意味着什么,以及如何修复它,以便我能够发现正确的模块名称?
我在下面的输出中替换了我的用户名。问题中的jar确实使用了ServiceLoader,但是没有用Java9编译。
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 moduleHow to deal with java keywords in auto generated module names in Java 9?中的答案与在模块名称中使用Java标识符有不同的错误。我的模块的自动jar名称应该是rcf,因为jar名称是rcf-1.0.jar。我所犯的错误也不一样。
发布于 2017-10-23 03:24:20
在导出模块描述时,任何
META-INF/services配置文件的内容都映射到provides声明。
为服务扫描的包是包含类文件的包。
另外,单个类的包名是从它们的完全限定名派生出来的。从共享日志中,com.username.rcf.server应该是要提供的服务的预期包名,这将变成
provides x.y.z.TestCmdChainInterface with com.username.rcf.server.TestCmdChain您的模块中似乎没有这样的包com.username.rcf.server。
https://stackoverflow.com/questions/46880621
复制相似问题