概念
??先解釋下maven的依賴傳遞:a jar包引入了b jar包,如果項目中引入了a jar包,其實也會把a依賴的b jar包引入。那現(xiàn)在有a、c這2個jar包,a jar包依賴的是1.0.0版本的b jar包,c jar包也依賴了b jar包,版本是2.0.0;如果項目中引入了a、c jar包,那b jar包到底引入哪個版本呢,是1.0.0還是2.0.0?這就是版本沖突,有4種方法可以解決。
路徑近者優(yōu)先
??比如a依賴b(版本是1.0.0),項目中引入a,同時直接引入了b(版本是2.0.0),這時前者版本路徑是不是長點,看做是1,后者是0;所以項目引入的b jar包的版本也確定了,是2.0.0;如果a依賴b,b依賴了c(版本是1.0.0),d依賴了c(版本是2.0.0),項目中引入了a、d jar包,c jar包也會被引入,版本會是2.0.0(前者版本路徑是2,后者是1)。哪個版本的依賴路徑短,就是會引入這個版本的jar包。
第一聲明者優(yōu)先
??如果a依賴了b(版本是1.0.0),c也依賴了b(版本是2.0.0);同時引入了a、c,這時b jar包的依賴路徑是一樣的了,就會用到這個原則:第一聲明者優(yōu)先。項目的pom.xml是這樣定義的:
<dependency>
<groupId>xx.xx.xx</groupId>
<artifactId>a</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>xx.xx.xx</groupId>
<artifactId>c</artifactId>
<version>1.0.0</version>
</dependency>
??a先聲明了,所以引入的b的版本也確定了:1.0.0;如果pom.xml中,這2個順序顛倒了,c放在前面了,引入的b的版本就會是2.0.0。
排除原則
??同樣是a依賴了b(版本是1.0.0),c依賴了b(版本是2.0.0);就想要2.0.0版本的b,可以用排除原則:
<dependency>
<groupId>xx.xx.xx</groupId>
<artifactId>a</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>xx.xx.xx</groupId>
<artifactId>b</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>xx.xx.xx</groupId>
<artifactId>c</artifactId>
<version>1.0.0</version>
</dependency>
??這時項目中引入a jar包時,不會把依賴的1.0.0版本的b jar包給引入(因為exclusion標簽把它排除了);但是引入c jar包時,依賴的2.0.0版本的b jar包照舊引入,這時就不存在版本沖突了,因為就引入了1個版本的b jar包,不是多個。所以項目是引入了2.0.0版本的b jar包。
版本鎖定
??這個就更加硬霸,a依賴了b(版本是1.0.0),c依賴了b(版本是2.0.0),我想要引入的是1.0.0版本的b jar包或者是其余版本的(3.0.0),可以用版本鎖定:文章來源:http://www.zghlxwxcb.cn/news/detail-550968.html
<dependencyManagement>
<dependencies>
<dependency>
<groupId>xx.xx.xx</groupId>
<artifactId>b</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>xx.xx.xx</groupId>
<artifactId>a</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>xx.xx.xx</groupId>
<artifactId>c</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
??這時項目中引入的b jar包的版本就是3.0.0了,不是1.0.0或者是2.0.0,以dependencyManagement標簽中定義的版本為準。文章來源地址http://www.zghlxwxcb.cn/news/detail-550968.html
到了這里,關(guān)于Maven解決jar包版本沖突的4種方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!