Spring Boot 2.2 ClassNotFoundException com.sun.xml.ws.spi.ProviderImpl 使用 fat jar 从 Java 8 升级到 11

Spring Boot 2.2 ClassNotFoundException com.sun.xml.ws.spi.ProviderImpl upgrading from Java 8 to 11 using fat jar

我正在从 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 在最后的 fat jar.
并检查了 class 在罐子里。

当 运行 处于 java -jar 模式时,spring 是否从 ClassLoader 中删除 classes?

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

但是 Java11 允许在 ForkJoinPool 构造函数中使用更多参数,因此我们可以使用所需的类加载器创建自己的池。
该解决方案发布在另一个答案中。