使用 Maven 模型时的 Java 11 未命名模块问题

Posted

技术标签:

【中文标题】使用 Maven 模型时的 Java 11 未命名模块问题【英文标题】:Java 11 unnamed module issue when using Maven model 【发布时间】:2020-07-09 22:43:36 【问题描述】:

所以,我正在尝试将工具从 Java 8 迁移到 Java 11。 我做了第一步让它在没有模块的情况下工作并且代码编译成功。

现在我正在尝试添加 module-info.java,但由于我的工具中使用的库,我首先遇到了问题。有些已经与 Java 11(例如 Lombok)兼容,但有些则不兼容,因此我尝试使用 requires 和 artifactId 名称来导入它们。 但是由于我的 Maven 模型和 Maven 模型构建器依赖关系,我似乎陷入了困境,因为在构建时出现以下错误:

[ERROR] the unnamed module reads package org.apache.maven.model.merge from both maven.model.builder and maven.model
[ERROR] module maven.model.builder reads package org.apache.maven.model.merge from both maven.model.builder and maven.model
[ERROR] module maven.model reads package org.apache.maven.model.merge from both maven.model.builder and maven.model

出现这种错误该怎么办?看来我两者都需要(如果我评论一个或另一个,构建仍然失败)。这是否意味着我无法将模块添加到我的工具中? 注意:库设置为最新版本(即 3.6.3)

【问题讨论】:

模块系统不允许拆分包。是否有更新版本的依赖项可以解决问题? 我尝试升级到最新版本(3.6.3),但问题仍然存在 我也面临同样的问题。我通过排除以下内容进行编译,但它会导致运行时问题,只是想知道是否还有其他模块要排除?实现('org.apache.maven:maven-resolver-provider:3.6.3')排除组:'org.apache.maven.model.merge',模块:'maven-model-merge' 好吧,我没能解决这个问题,所以我放弃了搬到 JPMS... 真可惜 【参考方案1】:

我使用 maven-exec-plugin “修复”了这个问题,如this question 的回答中所述。

编辑:当通过 maven-exec-plugin 运行主类时,编译器(出于某种我不知道的原因)不再抱怨冲突。

【讨论】:

我不确定我理解 exec 插件和这个拆分包问题之间的联系 好吧,IntelliJ 抱怨了一些导出到同一模块的软件包(正如您在问题中所描述的那样),我似乎无法修复它。但是,当我通过 exec 插件运行主类时,那些冲突的导出不再存在,然后您可以通过插件运行程序。这是一个肮脏的“解决方案”,但它“有效” 哦,这太令人惊讶了!

以上是关于使用 Maven 模型时的 Java 11 未命名模块问题的主要内容,如果未能解决你的问题,请参考以下文章

模型属性未统一命名的主干集合和模板

未处理的内部错误。在 pig 中使用 EXPLAIN 时的 Java 堆空间

java.lang.ClassNotFoundException:使用 Maven 依赖项时的 oracle.jdbc.OracleDriver

Maven-POM

Gradle 依赖项未列出本地 maven jar 的依赖项

是否可以为Java 11和java模块生成hibernate元模型?