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

Eclipse Java 11 classpath only not working compared to Maven

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

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

import javax.xml.namespace.QName;

这是有道理的,因为 JRE 是模块化的,而那些 类 在 java.xml 模块中,我不包括在内。但是为什么 Maven 可以正确编译并且应用程序在 J11 下启动?

我怀疑我需要告诉 Eclipse 为这个项目“--add-modules=ALL-SYSTEM”,但我不确定在哪里或如何。我已经尝试将 build-path/libraries 中的所有 JDK/JRE 模块从隐式移动到显式,但这没有帮助。

您可能在类路径上有一些多余的 xml api jar 并且 javac(错误地)不会因为 JDK-8215739, but Eclipse already (correctly) does after bug 536928

而抱怨

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

要解决您的问题:尝试 "Open Type" 在您的类路径上的 jars 中查找 javax.xml.namespace.QName 的任何副本,并在您的 pom.xml

中排除这些依赖项

“尝试使用“Open Type”在您的类路径中的 jars 中查找 javax.xml.namespace.QName 的任何副本,并在您的 pom.xml 中排除这些依赖项” 这也是我 problem.In 我的案例的解决方案,我不得不从轴中排除“org.apache.axis”并为 javax.xml.rpc

添加单独的依赖项
<dependency>
            <groupId>axis</groupId>
            <artifactId>axis</artifactId>
            <version>1.4</version>
          <exclusions>
                <exclusion>
                    <groupId>axis</groupId>
                    <artifactId>axis-wsdl4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.axis</groupId>
                    <artifactId>axis-jaxrpc</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>javax.xml.rpc</groupId>
            <artifactId>javax.xml.rpc-api</artifactId>
            <version>1.1.2</version>
        </dependency>

对于仍在使用轴 1.3 的任何可怜的灵魂,您需要排除的组 ID 只是 axis

    <dependency>
        <groupId>axis</groupId>
        <artifactId>axis</artifactId>
        <version>1.3</version>
        <exclusions>
            <exclusion>
                <groupId>axis</groupId>
                <artifactId>axis-wsdl4j</artifactId>
            </exclusion>
            <exclusion>
                <groupId>axis</groupId>
                <artifactId>axis-jaxrpc</artifactId>
            </exclusion>
        </exclusions>
    </dependency>