被jar包衝突害慘了

第一次搭建項目,選擇了springmvc+spring4+hibernate4的框架。搭建過程中各種不順,由於第一次碰到jar包衝突的問題,在這裏卡了很久,現在記錄下來。

 

先報錯:org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException,按照網上搜到的材料,是缺少aspectjweaver.jar,導入後,仍然報錯。

花了一晚上的時間重新定位錯誤,發現在UserServiceImpl類中,一旦加上@transactional 標籤就出現上述錯誤,去掉@transactional 就不報錯。一度懷疑我的xml配置有問題,又花了一天的時間重新研究了spring的xml配置文件,仔細查看了<aop>和<tx>標籤的配置,反覆修改仍然報錯。期間甚至被誤導以爲是Spring中的AOP以及聲明式事務 @Transactional無法攔截事務,然後又搜了相關的文章,http://www.iteye.com/problems/2646,報錯依舊。

在排除各種原因,嘗試各種方法後,又回到jar包的問題,存在“jar包導入了,但是編譯時不存在”的問題,然後我懷疑maven出問題了!或許是依賴的包沒下載全,或者文件缺失,我到本地.m2倉庫下,找到aspectjweaver文件夾,哈哈,空也!正當我爲找到病因高興時,突然發現,這是1.5.4的版本,我記得我pom中引用的是1.8的版本啊。。。

又找到這個文件夾,我就知道又錯了。每個文件還有sha1,根本就不可能出現下載過程中文件出錯的情況。。。我還是不相信maven,然後我把pom中的依賴註釋掉了,手動導入這個包到項目lib中,終於!這個錯誤沒了!!!!!可是又誕生了另一個錯誤了!!spring中的某個類找不到,我又按照這個方法,找到jar包,取消依賴,手動導入到lib中,只到所有的錯誤消失!

 

 

 

最後終於在tomcat中跑起來了~~~~興奮的推到git,記錄爲“搞定框架”~

 

我真是圖樣圖森破啊,以爲這就結束了。。

 

喫過晚飯,給我的舍友秀了一下後,還一切正常。

開始動手寫業務,剛寫了一個功能,調試就報錯了,hibernate的某個類找不到?不應該啊,我明明導入了啊,再次取消maven依賴,手工添加到lib,還是報錯!真是坑爹,我把新加的代碼全部註釋掉,回滾到上次正常跑起來的狀態,暈,這次竟然跑不起來了。。。我用git回滾,也跑不起來了!

提交到git之前能跑起來,回滾之後竟然跑步起來?真是怪事。我又檢查了下沒上傳到git的.idea的文件,沒問題,排除。

 

 

這個時候,我隱隱覺得什麼地方不對了。同樣的代碼前一次執行和後一次執行竟然不一樣?這裏代碼全是寫死的,沒有random啥的啊,有違常理啊。那麼真相只有一個!某個地方有A,有B,第一次執行了A,第二次執行了B!而且這個AB在我看不到的地方,那是啥,jar包衝突唄!!!!

然後我找到了target文件夾,簡直要暈過去了

這衝突的多明顯啊!不報錯纔怪,接着我把所有的依賴全打上,本地項目lib清空,按照 http://www.javaranger.com/archives/1232  在intellij裏解決了衝突的包。

 

至此,所有的問題纔算解決!

 

總結,以前只是知道,部署到tomcat裏時,要把servlet-api和jsp-api兩個包刪除,那是我接觸到的唯一的包衝突的實例。經過這次教訓,總算徹底的認識到jar包衝突的問題了:很隱蔽!沒有經驗根本無法發現,這也是使用maven帶來的弊端吧,間接引進的包太多。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章