Maven的Pom文件中的隱式依賴導致Jar包衝突的問題

在一次的maven項目中遇到這樣一個bug:

    編譯器沒有報什麼錯,但無法編譯,或者能編譯,項目啓動不了。後來我才發現是以下的問題:

    項目中的pom文件中,依賴了webx3.core,而webx3.core又隱式依賴了fasttext相關的jar包,同時我在pom中也引人了fasttext.all,

    fasttext.all也隱式依賴了fasttext相關的jar包,兩類jar包版本還不一樣,這樣就導致了jar包衝突的問題,牽扯到的pom文件依賴如下:

<dependency>
<groupId>com.alibaba.platform.shared</groupId>
<artifactId>webx3.core</artifactId>
</dependency>

<dependency>
<groupId>com.alibaba.platform.shared</groupId>
<artifactId>fasttext.all</artifactId>
</dependency>

那怎麼查看這種jar包衝突問題呢?

eclipse提供了對隱式依賴jar包的查看功能:在eclipse中打開一個pom文件,在Dependency Hierarchy的Tab頁中,就可以查看當前pom文件中顯示聲明的jar包,及這些顯示聲明的jar中隱式引入的依賴jar包,我在這裏搜索fasttext,就可以清楚的看到了,一個依賴了1.3.5版本的,一個依賴了1.3-SNAPSHOT版本的。

    發現了問題就簡單了,只要通過排除webx3.core中的fasttext的依賴,就解決了上述衝突的問題:

<dependency>
<groupId>com.alibaba.platform.shared</groupId>
<artifactId>webx3.core</artifactId>
<exclusions>
<exclusion>
<artifactId>jakarta.commons.codec</artifactId>
<groupId>com.alibaba.external</groupId>
</exclusion>
<exclusion>
<groupId>com.alibaba.platform.shared</groupId>
<artifactId>fasttext-css</artifactId>
</exclusion>
<exclusion>
<groupId>com.alibaba.platform.shared</groupId>
<artifactId>fasttext-psoriasis</artifactId>
</exclusion>
<exclusion>
<groupId>com.alibaba.platform.shared</groupId>
<artifactId>fasttext-sec</artifactId>
</exclusion>
<exclusion>
<groupId>com.alibaba.platform.shared</groupId>
<artifactId>fasttext-segment</artifactId>
</exclusion>
</exclusions>
</dependency>

對應排除,改bug是個挺實用的方法。

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