与 Maven 相比,Eclipse Java 11 类路径仅不起作用

tbe*_*not 5 eclipse java-platform-module-system java-11

将旧的 ERP 系统迁移到 JPMS 被证明是一个很大的问题(Java 11 Eclipse 找到了自动模块,Maven 没有),所以我决定首先尝试用 Java 11 简单地替换 Java 8,但通过不引入将所有内容保留在类路径上任何 module-info.java 文件。这实际上进行得很顺利。Maven 编译没有问题,生成的应用程序也从命令行启动。

但是当我将该 Maven 项目导入 Eclipse 2019-03 时,它会抱怨 ao java.xml 包,例如这个导入:

import javax.xml.namespace.QName;
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为 JRE 是模块化的,并且这些类在 java.xml 模块中,我没有包含。但是为什么 Maven 然后正确编译并且应用程序在 J11 下启动?

我怀疑我需要告诉 Eclipse 为这个项目“--add-modules=ALL-SYSTEM”,但我不确定在哪里或如何。我已经尝试将构建路径/库中的所有 JDK/JRE 模块从隐式移动到显式,但这无济于事。

Til*_*hcy 5

您可能在类路径上有一些多余的 xml api jar,并且 javac(错误地)不会因为JDK-8215739而抱怨,但是 Eclipse 已经(正确地)在错误 536928之后做了

在运行时,JVM 似乎忽略了类路径上已经出现在命名模块中的包,因此 javac 的行为实际上与此一致。

要解决您的问题:尝试“打开类型”以javax.xml.namespace.QName在您的类路径中查找jars 中的任何副本,并在您的 pom.xml 中排除这些依赖项