最近遇到一个报错,记录一下解决的过程:
报错:
22-03-18.10:16:33.718 [JSF-FileRegistry-Back-Load-2-T-1] ERROR FileRegistry - com/sun/istack/Pool
java.lang.NoClassDefFoundError: com/sun/istack/Pool
at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1156) ~[jaxb-impl-2.3.1.jar:2.3.1]
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:165) ~[jaxb-impl-2.3.1.jar:2.3.1]
..
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_65]
Caused by: java.lang.ClassNotFoundException: com.sun.istack.Pool
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) ~[catalina.jar:7.0.42]
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) ~[catalina.jar:7.0.42]
... 20 common frames omitted
解决办法
Maven中增加 jaxb-impl 和 jaxb-core两个依赖即可,此处参考点击跳转。如果已经有这两个jar包,还是出现同样的问题,可以变更一下jaxb-impl的版本号,另外jaxb-core 依赖于 istack-commons-runtime,也可以在 jaxb-core 的 pom 中找到,此处参考 点击跳转。
总的来说,java.lang.ClassNotFoundException,即java类找不到。这类典型异常通常是由于,没有在依赖管理中声明版本或者没有引入导致,由于maven仲裁机制的存在,有的时候选取了错误的版本,而这个版本恰好缺少了我们所需要的某个class,就会产生该错误。
例如httpclient-4.4.jar升级到httpclient-4.36.jar时,类org.apache.http.conn.ssl.NoopHostnameVerifier被去掉了,如果此时我们本来需要的是4.4版本,且用到了NoopHostnameVerifier这个类,而maven仲裁时选择了4.6,则会导致ClassNotFoundException异常。
参考
1、https://github.com/Enterprise-Content-Management/documentum-rest-client-java/issues/4 2、Jar包冲突问题及解决方案! 3、https://stackoverflow.com/questions/60389012/java-lang-noclassdeffounderror-com-sun-istack-pool
|