1. 程式人生 > >怎麼解決maven管理jar包衝突問題

怎麼解決maven管理jar包衝突問題

maven管理jar包依賴的時候,假如你的依賴包A需要間接依賴B的1.0版本,而你的工程裡又需要用到B的2.0版本,這個時候就可能會出現執行時jar衝突的異常,會報java.lang.NoSuchMethodError 或者 java.lang.ClassNotFoundException 、java.lang.NoClassDefFoundError 解決方法一: 第一步:查詢衝突jar包的依賴樹 mvn dependency:tree -Dverbose -Dincludes=org.springframework:spring 第二步:在pom裡找到相應的jar去掉他的依賴傳遞 <dependency> <groupId>com.taobao</groupId> <artifactId>memcache-session-super-util</artifactId> <version>2.4.3-SNAPSHOT</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> </exclusions> </dependency> 方法二:在父級pom中使用dependencyManagement管理公用的jar版本,子類中引入自己需要的jar版本,maven會優先使用子類的jar。 <dependencyManagement> <dependencies> <dependency> <groupId>com.taobao.sdk</groupId> <artifactId>sdk</artifactId> <version>20151027-SNAPSHOT</version> </dependency> </dependencies> </dependencyManagement> 不過這裡可能會有一個坑,假如你的project分了多個module,公共pom引入某個jar的1.0版本,你的web module中需要引入這個jar的2.0版本,但是你的web module又需要用到一個common module,而你沒有修改common 這個module的pom.xml,執行的時候如果某個方法間接的用到common module裡的方法而且又涉及到了這個jar的2.0新增方法,這個時候就會丟擲方法invoke失敗的異常。