3

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

我在下面的输出中替换了我的用户名。有问题的 jar 确实使用了 aServiceLoader但未使用 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

如何处理 Java 9 中自动生成的模块名称中的 java 关键字?与在模块名称中使用 Java 标识符有关的不同错误。我的模块的自动 jar 名称应该只是rcf因为 jar 名称是rcf-1.0.jar. 我得到的错误也不同。

4

1 回答 1

4

在派生模块描述时,任何 META-INF/services配置文件的内容都映射到provides 声明。

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

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

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

Seems like there is no such package com.username.rcf.server existing in your module.

于 2017-10-23T03:24:20.197 回答