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>
将旧的 ERP 系统迁移到 JPMS 被证明是一个很大的问题 (
但是当我将该 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>