spring - 在 Java 11 上使用 Spring Boot 运行 Apache CXF 需要哪些依赖项?
问题描述
这让我发疯了。我们正在尝试将 Java 11 与 Spring Boot(自托管)和 Apache CXF(用于代码优先 SOAP 开发)一起使用。
这种组合是不可能的吗?
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.3.2</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>javax.activation</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
结果是:
[ERROR] module java.xml.bind reads package javax.activation from both jakarta.activation and java.activation
[ERROR] module java.xml.soap reads package javax.activation from both java.activation and jakarta.activation
[ERROR] module java.xml.ws reads package javax.activation from both java.activation and jakarta.activation
[ERROR] the unnamed module reads package javax.activation from both java.activation and jakarta.activation
[ERROR] module spring.context reads package javax.activation from both java.activation and jakarta.activation
[ERROR] module spring.boot.autoconfigure reads package javax.activation from both java.activation and jakarta.activation
[ERROR] module spring.boot reads package javax.activation from both java.activation and jakarta.activation
[ERROR] module java.annotation reads package javax.activation from both java.activation and jakarta.activation
[ERROR] module java.activation reads package javax.activation from both java.activation and jakarta.activation
[ERROR] module jakarta.activation reads package javax.activation from both java.activation and jakarta.activation
[ERROR] module org.apache.cxf.core reads package javax.activation from both java.activation and jakarta.activation
[ERROR] module org.apache.cxf.frontend.jaxws reads package javax.activation from both java.activation and jakarta.activation
[ERROR] module spring.beans reads package javax.activation from both java.activation and jakarta.activation
我整个星期都在添加和删除依赖项。我最终会遇到未找到类错误、未找到模块错误(对于我自己的模块)或上述错误。如果我排除 jakarta.activation 模块,我会收到编译错误,因为另一个模块依赖于它。
关于我可以用来让这个垃圾工作的依赖项集有什么想法吗?
解决方案
我们也在其中一个项目中使用 Spring Boot、CXF 和 Java 11。我们遇到了一些问题,因为当前版本的 CXF 仍然需要一些 sun 和 javax 依赖项。
这是我们的工作依赖项:
<dependency>
<groupId>jakarta.xml.ws</groupId>
<artifactId>jakarta.xml.ws-api</artifactId>
<version>${jakarta.version}</version>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>${jakarta.version}</version>
</dependency>
<dependency>
<groupId>jakarta.jws</groupId>
<artifactId>jakarta.jws-api</artifactId>
<version>${jakarta.version}</version>
</dependency>
<dependency>
<groupId>jakarta.activation</groupId>
<artifactId>jakarta.activation-api</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>jakarta.xml.soap</groupId>
<artifactId>jakarta.xml.soap-api</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.messaging.saaj</groupId>
<artifactId>saaj-impl</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.4.0-b180830.0359</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.jws</groupId>
<artifactId>javax.jws-api</artifactId>
<version>1.1</version>
</dependency>
和一些属性:
<properties>
...
<java.version>11</java.version>
<springfox.swagger.version>3.0.0</springfox.swagger.version>
<apache.cxf.version>3.3.0</apache.cxf.version>
<jakarta.version>3.0.0</jakarta.version>
...
</properties>