【原】Maven解決jar沖突調試步驟:第三方組件引用不符合要求的javassit導致的相關異常


【環境參數】
開發框架:Spring + MyBatis + SpringMVC + Kettle
JDK版本:1.8.0_91
javassist依賴版本:javassit-3.12.1.GA

 

【障礙再現】
在Kettle工具初始化時,拋出如下異常:
java.io.IOException: invalid constant type: 15
at javassist.bytecode.ConstPool.readOne(ConstPool.java:1090)
at javassist.bytecode.ConstPool.read(ConstPool.java:1033)
at javassist.bytecode.ConstPool.<init>(ConstPool.java:149)
at javassist.bytecode.ClassFile.read(ClassFile.java:737)

 

【問題原因】
    上述異常的原因是JDK8與javassit-3.12.1.GA在進行AOP功能時,由於不兼而導致的。經過調查得知,需要將javassit-3.12.1.GA升級為javassit-3.18.以上版本即可解決該問題。
    但此時發現“javassist.3.12.GA”這個依賴在系統的POM.xml中並沒有對應的GAV配置,導致無法刪除或者修改 “javassist.3.12.GA”這個依賴,因此,如何找到項目依賴的所有的Jar包中,哪一個Jar包引用了“javassist.3.12.GA”,就成了急需解決的問題

 

【解決方案】
Step 1:定位原系統中哪個第三方Jar包引用了“javassist.3.12.GA”。
(1)將目錄切換到原系統POM.xml所在目錄。

(2)打開cmd命令行窗口,執行命令"mvn dependency:tree > 1.txt"該命令會分析POM.xml文件中<dependencies>元素所包含的所有Jar包中,每一個Jar包引用其他Jar包的目錄樹,並且將這些信息打印到"1.txt"文件中,如下圖所示。

通過分析“1.txt”文件得知,“javassist.3.12.GA”這個版本的Jar包是原系統中 “scannotation.jar”包引用的,此時,需要將javassit-3.12.1.GA這個Jar包去掉,為原系統添加一個新的javassit-3.18.2.GA包。

Step 2:從Jar包中去除javassist-3.12.1.GA

    由於已經定位了javassist-3.12.1.GA是被系統的scannotation組件所引用,所以我們直接讓scannotation組件在打包時自動過濾掉javassist-3.12.1.GA即可。

 1 <dependency>
 2     <groupId>org.scannotation</groupId>
 3     <artifactId>scannotation</artifactId>
 4     <version>1.0.3</version>
 5     <exclusions>
 6         <exclusion>
 7             <groupId>javassist</groupId>
 8             <artifactId>javassist</artifactId>                    
 9         </exclusion>
10     </exclusions>
11 </dependency>

Step 3:添加javassit-3.18.2.GA這個新的GAV

1 <dependency>
2     <groupId>org.javassist</groupId>
3       <artifactId>javassist</artifactId>
4       <version>3.18.2-GA</version>
5 </dependency>

 

 【拓展:不兼容原因】

Java 8的最新更新版本update 11導致了一些第三方工具不兼容問題。該bug似乎由Java 8u11中的JVM字節碼驗證子系統發生變化而導致的。Java語言要求任何調用超類構造函數必須在第一次調用時進行,但Java早期版本中的字節碼驗證器並沒有強制去驗證,甲骨文公司開始考慮解決這一問題,但目前來看似乎影響了一些第三方工具。

 

【參考資料】 

1.maven解決jar沖突調試步驟:http://blog.csdn.net/lk_blog/article/details/41554757
2. Java 8升級導致第三方工具不兼容:http://www.iteye.com/news/29231

 

【其他注意事項】
讀者如要轉載,請標明出處和作者名,謝謝。
本文地址:http://www.cnblogs.com/zjrodger/p/5641608.html
作者名:zjrodger
作者博客地址01:http://space.itpub.net/25851087
作者博客地址02:http://www.cnblogs.com/zjrodger


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM