【问题标题】:Java 11 Eclipse finds automatic module, Maven does notJava 11 Eclipse 找到自动模块,Maven 没有
【发布时间】:2019-08-10 21:49:21
【问题描述】:

我正在尝试将一个已有 15 年历史的 Maven 多模块项目升级到 Java 11,以及 Java 9 中引入的模块系统。由于该项目是使用 Maven 构建的,因此所有依赖项都非常清楚。首先,我想使用自动模块名称来执行此操作,以免也引入升级的工件(如果不是绝对需要的话)。

Eclipse 在这个过程中非常有帮助,自动完成 module-info.java 中的自动模块名称。例如:

requires dom4j;

但是,如果我使用 Maven 进行编译,我会收到有关它无法找到 Eclipse 刚刚在其中自动完成的模块的错误。

module-info.java:[29,18] module not found: dom4j

我正在使用 Maven 的编译器插件 3.7.0(3.8.0 根据 https://jira.apache.org/jira/browse/MCOMPILER-355 给出 NullPointerException)我怀疑 Maven 将 jars 设置在类路径而不是模块路径上,但编译器的插件调试输出没有记录下来。

如何让 Maven 正确处理这些模块?

【问题讨论】:

  • 首先您定义了一个不存在的必需模块,如错误输出中所示。这意味着您必须使用具有模块描述符的更高版本。此外,引用的问题已关闭。此外,如果没有更多信息,特别是您应该使用最新版本的 maven-compiler-plugin 并更新您正在使用的所有插件到最新版本,因为与模块支持相关的更改数量较多等等。还有完整的 pom 文件和 module-info.java 文件也会有帮助吗....
  • 下载并手动编译 maven-compiler-plugin.3.8.1-SNAPSHOT (并使用它)会导致模块出现明显错误,因此 3.7.0 和 3.8.0 显然都不能处理这个项目结构。待续。
  • 不幸的是,说 SNAPSHOT 版本让它与众不同是没有帮助的。有一个示例项目会很有帮助,该项目可以显示问题并可以重现该问题。此外,如果您认为这确实是一个错误,请使用适当的信息提交问题。在不了解您的项目结构的情况下,无法以任何方式提供帮助...
  • 这是一个15年的项目,你不想列出整个结构,它会吓到人。问题的本质是 maven-compiler-plugin 3.7.0 显然没有将(所有)自动命名模块放在模块路径上,并且 3.8.0 有 NullPointerException。是的,NPE 问题已关闭,因此使用 3.8.1(SNAPSHOT,因为它尚未发布)。因此,如果有人遇到问题,他会知道该怎么做。
  • 对不起,但这无济于事。自动模块名称是错误的方式..您必须使用 MANIFEST.MF (Automatic-Module-Name entry) 没有信息不可能帮助...

标签: maven java-module maven-compiler-plugin


【解决方案1】:

我遇到了同样的问题。添加

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
        </plugin>
    </plugins>
</build>

到我的 pom 为我解决了问题...

【讨论】:

  • 是的,在我发帖时还没有发布。 3.8.1-SNAPSHOT 确实有效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
  • 2020-04-15
  • 2018-06-22
  • 2018-10-25
  • 2019-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多