【问题标题】:Spring Boot 2.2 ClassNotFoundException com.sun.xml.ws.spi.ProviderImpl upgrading from Java 8 to 11 using fat jarSpring Boot 2.2 ClassNotFoundException com.sun.xml.ws.spi.ProviderImpl 使用 fat jar 从 Java 8 升级到 11
【发布时间】:2019-12-19 09:12:03
【问题描述】:

我正在从 Java 8 升级到 Java 11。
我正在使用 javax.ws 包,所以我必须包含在 Java 11 中删除的依赖项。

        <dependency>
            <groupId>jakarta.xml.ws</groupId>
            <artifactId>jakarta.xml.ws-api</artifactId>
            <version>2.3.2</version>
        </dependency>

        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-rt</artifactId>
            <version>2.3.3-b01</version>
        </dependency>

        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>rt</artifactId>
            <version>2.3.3-b01</version>
        </dependency>

我的 Spring Boot 2.2.2 应用程序可以像 mvn spring-boot:run 一样完美运行。

当使用 java -jar app.jar 运行时,在搜索 com.sun.xml.ws.spi.ProviderImpl 时会给出 ClassNotFoundException
我检查了 rt-version.jar 是否在最终的胖 jar 中。
并检查类在罐子里。

java -jar 模式下运行时,sp​​ring boot 是否会从 ClassLoader 中删除类?

【问题讨论】:

  • 你用的是带依赖的jar吗?
  • 是的,使用 java -jar 运行 spring boot 应用程序意味着使用 jar 将所有依赖项都包含在内

标签: java spring-boot java-11 java-ws javax.xml


【解决方案1】:

真正的问题是从 Java9 开始的行为变化。
ForkJoinPools 现在没有主线程类加载器,而是有系统类加载器。

但 Java 11 允许在 ForkJoinPool 构造函数中使用更多参数,因此我们可以使用所需的类加载器创建自己的池。
解决方案发布在另一个答案中。 https://stackoverflow.com/a/59444016/878015

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-01
    • 2020-06-17
    • 2021-05-20
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多