1. 程式人生 > >被jar包衝突害慘了

被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帶來的弊端吧,間接引進的包太多。