在一次的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是個挺實用的方法。