首页 > 解决方案 > 在 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 模块,我会收到编译错误,因为另一个模块依赖于它。

关于我可以用来让这个垃圾工作的依赖项集有什么想法吗?

标签: springmavenspring-bootcxf

解决方案


我们也在其中一个项目中使用 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>

推荐阅读