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

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

我根据需要使用插件的 v3.7.0 和 JDK 9.0.1。我添加了两个 requires 语句,每个语句都引用类路径(自动模块)中的一个 jar。在我将 jars 移动到 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。我得到的错误也不同。

最佳答案

While deriving module description the contents of any META-INF/services configuration files are mapped to provides declarations.

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

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

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

似乎您的模块中不存在这样的包 com.username.rcf.server

关于java - module-info.java 使用 maven-compiler-plugin 和自动模块编译失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46880621/

相关文章:

java - 用 Spring Events 替换计划任务

java - 找不到基本名称的 Spring ResourceBundle

Java 9 HttpClient 发送多部分/表单数据请求

java - 如何从 Java 9 中的另一个模块获取 ResourceBundle?

maven - 没有公钥 : Key with id: (XXXXX) was not able to be located (oss. sonatype.org)

java - JDK9 中有哪些预定义模块或者我需要哪个模块来修复依赖问题?

java - 正确格式化我的输出

部分数组的java for-each循环

java - 获取 jstring/char * 的长度?

java - Proguard 混淆在使用 Maven 的 Jenkins 构建中失败 - 无法读取 classes.jar