[英]Spring Boot 2.2 ClassNotFoundException com.sun.xml.ws.spi.ProviderImpl upgrading from Java 8 to 11 using fat jar
I'm upgrading from Java 8 to Java 11.我正在从 Java 8 升级到 Java 11。
I'm using javax.ws packages so I had to include dependencies removed in 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>
My Spring Boot 2.2.2 application works perfect running like mvn spring-boot:run
.我的 Spring Boot 2.2.2 应用程序可以像
mvn spring-boot:run
一样完美mvn spring-boot:run
。
When running with java -jar app.jar gives a ClassNotFoundException
while searching for com.sun.xml.ws.spi.ProviderImpl当使用 java -jar app.jar 运行时,在搜索 com.sun.xml.ws.spi.ProviderImpl 时会给出
ClassNotFoundException
I checked the rt- version .jar is in the final fat jar.我检查了 rt- version .jar 是否在最终的胖罐中。
And checked the class is in the jar.并检查了课程是否在罐子里。
Does spring boot remove classes from ClassLoader when running in java -jar
mode?在
java -jar
模式下运行时,spring boot 是否会从 ClassLoader 中删除类?
The real problem was a change of behavior as of Java9.真正的问题是 Java9 的行为改变。
ForkJoinPools now don't have main thread classloader, they have system classloader instead. ForkJoinPools 现在没有主线程类加载器,而是有系统类加载器。
But Java 11 allows more params in ForkJoinPool constructor so we can create our own pools with our desired classloader.但是 Java 11 允许在 ForkJoinPool 构造函数中使用更多参数,因此我们可以使用所需的类加载器创建自己的池。
The solution is posted in another answer.解决方案发布在另一个答案中。 https://stackoverflow.com/a/59444016/878015
https://stackoverflow.com/a/59444016/878015
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.