maven項目由於多個依賴中含有同一個jar包導致的衝突問題的解決辦法

今天在利用mapreduce對HBase進行輸入輸出的時候,發生了一件很無厘頭的事情,我和同事寫同樣的代碼,但是我成功了,而他卻失敗了,這就有點讓人頭疼。一開始我們以爲是配置的問題,但是經過比對,配置並沒有什麼不同。因此,我就將mapreduce的執行過程看了一遍,結果發現,他的org.apache.hadoop.conf.Configuration 類和我的org.apache.hadoop.conf.Configuration類是不同的,發現這個問題之後,就好辦了許多。這就是jar包的版本問題所導致的,那麼我們兩的依賴導入版本沒有什麼不同,爲什麼會發生jar包不同的事情呢?

這就涉及到maven項目加載依賴的機制,根據“artifactId”標籤中的內容開始加載,如果依賴中已經存在了相同的jar包,那麼即使版本不同也不會再次加載,所以pom.xml中依賴的添加順序也是十分重要的。我跟同事的依賴都一樣,但是我導入的hadoop依賴在前,hbase的依賴在後,因此我的hadoop-common版本是按照hadoop的版本加載的2.6.4的版本,而他的hadoop-common的版本卻是根據hbase的版本所加載的2.5.1的版本,這就導致我們相同的代碼產生了不同的結果。


我們只是一個小小的測試,如果是對於大的項目,那麼這就必須引起注意,要不然總是會發生一些無厘頭的異常,影響項目的進度。

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