1

我正在从 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 运行ClassNotFoundException时,搜索 com.sun.xml.ws.spi.ProviderImpl
我检查了rt- version.jar是否在最终的 fat jar 中。
并检查班级是否在罐子里。

在此处输入图像描述

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

4

1 回答 1

2

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

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

于 2019-12-22T12:58:11.133 回答