在使用Maven中我們導(dǎo)入jar包坐標(biāo)時會產(chǎn)生依賴傳遞,而依賴傳遞難免會發(fā)生jar包間的依賴沖突,解決jar包沖突有以下解決方案:
? ? 1)、在平時導(dǎo)入jar包時即使產(chǎn)生了依賴沖突程序也會照樣運行,這是因為maven會遵循兩個原則,來解決jar包沖突:
? ? ? ? ? ? ? a)政溃、第一聲明者優(yōu)先原則;即在pom文件中jar包坐標(biāo)的導(dǎo)入順序決定了發(fā)生依賴沖突時使用哪個發(fā)生沖突的jar包娇斩,先聲明者優(yōu)先;
? ? ? ? ? ? ?b)影暴、路徑近者優(yōu)先原則续语;即直接依賴優(yōu)先于間接依賴,依賴的層級越低越優(yōu)先;
? ? 2)襟己、排除依賴;
? ? ? ? ? ? ?原因分析:由于依賴沖突是相同jar包所產(chǎn)生的引谜,我們可以通過將指定的依賴進(jìn)行排除,只保留沖突的一方;
? ? ? ? ? ? ? 實現(xiàn):通過指定的標(biāo)簽實現(xiàn)排除指定的依賴(排除了spring-beans的依賴)
? ? 3)擎浴、鎖定版本;
? ? ? ? ? ? ? ? 我們可以通過指定標(biāo)簽鎖定指定jar包的版本,保證我們的程序在運行時采用我們鎖定jar包的版本(例:當(dāng)別人在使用我們程序所打成的jar包時,通過版本鎖定即使使用者在他們的程序中導(dǎo)入了其他版本的相同jar包员咽,也會保證我們程序中的jar包版本不會發(fā)生改變,保證了程序的正常運行);
? ? ? ? ? ? 需要注意的是:
? ? ? ? ? ? ? ? ? ? 1)退客、鎖定標(biāo)簽并不會導(dǎo)入依賴,如果需要導(dǎo)入以來還需要通過<dependency>標(biāo)簽來完成,通過<dependency>導(dǎo)入依賴時可以不聲明jar包的版本,會自動導(dǎo)入鎖定的版本jar包;
? ? ? ? ? ? ? ? ? ? 2)骏融、鎖定版本的標(biāo)簽一般只寫在父模塊中,子模塊可以通過繼承也會受影響;
? ? ? ? ? ? ? ? ? ? 3)、如果子模塊中沒有聲明版本,并且父模塊中也沒有書寫鎖定版本的標(biāo)簽萌狂,則程序會報錯;
? ??