JDK 11 使用 JAXB 和 JAXWS 适用于 Eclipse 但不适用于 IntelliJ
JDK 11 with JAXB and JAXWS works with Eclipse but not IntelliJ
我正在将使用 JAXB 和 JAX-WS 的应用程序从 JDK 8 转换为 JDK 11。当我使用 Eclipse IDE 时,代码 运行s 但是完全相同的代码在 IntelliJ IDEA
中失败
我已经使用 Eclipse 和 IntelliJ 创建了一个 Maven 项目 IDEA。另一个问题中描述了寻找 Maven 资源的工作组合的问题。
代码在两种环境中都能正确构建。我尝试将 IntelliJ IDEA 项目创建为 Maven 项目以及标准 IDEA 项目
pom.xl的一部分
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11.0.2</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11.0.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.0</version>
</dependency>
<!-- JAXWS for Java 11 -->
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>rt</artifactId>
<version>2.3.1</version>
</dependency>
模块-info.java
module org.openfx.gustfx {
requires javafx.controls;
requires javafx.fxml;
requires transitive javafx.graphics;
requires java.xml.bind;
requires java.xml.ws;
requires javax.jws;
opens com.agile.ws.schema.common.v1.jaxws to javafx.fxml;
opens org.openfx.gustfx to javafx.fxml;
exports org.openfx.gustfx;
}
当代码来自 Eclipse 运行 时,没有错误。
运行 来自 IntelliJ IDE 的相同代码导致此错误
java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl
搜索 jar 文件确认 ProviderImpl.class 现在位于 com.sun.ws.spi 而不是 com.sun.xml.internal.ws.spi 这不会导致 eclipse 出现问题,但 IDEA 报告ClassNotFoundException
因此,我的问题"How does eclipse resolve this problem while IntelliJ does not ?"
在 IntelliJ 的 Roman Shevchenko 的帮助下,我使用以下 pom.xml
解决了这个问题
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>javax.jws</groupId>
<artifactId>javax.jws-api</artifactId>
<version>1.1</version>
</dependency>
和module-info.java
requires java.xml.ws;
requires java.xml.bind;
requires javax.jws;
我正在将使用 JAXB 和 JAX-WS 的应用程序从 JDK 8 转换为 JDK 11。当我使用 Eclipse IDE 时,代码 运行s 但是完全相同的代码在 IntelliJ IDEA
中失败我已经使用 Eclipse 和 IntelliJ 创建了一个 Maven 项目 IDEA。另一个问题中描述了寻找 Maven 资源的工作组合的问题。
pom.xl的一部分
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11.0.2</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11.0.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.0</version>
</dependency>
<!-- JAXWS for Java 11 -->
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>rt</artifactId>
<version>2.3.1</version>
</dependency>
模块-info.java
module org.openfx.gustfx {
requires javafx.controls;
requires javafx.fxml;
requires transitive javafx.graphics;
requires java.xml.bind;
requires java.xml.ws;
requires javax.jws;
opens com.agile.ws.schema.common.v1.jaxws to javafx.fxml;
opens org.openfx.gustfx to javafx.fxml;
exports org.openfx.gustfx;
}
当代码来自 Eclipse 运行 时,没有错误。 运行 来自 IntelliJ IDE 的相同代码导致此错误
java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl
搜索 jar 文件确认 ProviderImpl.class 现在位于 com.sun.ws.spi 而不是 com.sun.xml.internal.ws.spi 这不会导致 eclipse 出现问题,但 IDEA 报告ClassNotFoundException
因此,我的问题"How does eclipse resolve this problem while IntelliJ does not ?"
在 IntelliJ 的 Roman Shevchenko 的帮助下,我使用以下 pom.xml
解决了这个问题 <dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>javax.jws</groupId>
<artifactId>javax.jws-api</artifactId>
<version>1.1</version>
</dependency>
和module-info.java
requires java.xml.ws;
requires java.xml.bind;
requires javax.jws;