【Maven】006-Maven 依賴傳遞和依賴沖突
一、依賴傳遞
1、概述
-
概念:
- Maven 依賴傳遞是指當一個項目依賴于另一個項目或庫時,Maven 會自動解析和獲取這些依賴,確保項目能夠順利構建和運行。
- 依賴傳遞包括直接依賴和間接依賴。直接依賴是項目直接引用的庫,而間接依賴是直接依賴所引用的其他庫。
-
作用:
- 簡化項目管理:Maven 通過依賴傳遞簡化了項目的管理,開發(fā)者只需聲明直接依賴,Maven 會負責解析和獲取所有的間接依賴。
- 版本控制:Maven 可以管理不同庫的版本沖突,確保項目使用的是正確的版本,避免沖突和不一致性。
-
傳遞的原則:
- 傳遞性: Maven 會自動傳遞依賴,確保直接依賴所需的庫的所有間接依賴也能夠被正確解析和獲取。
- 最短路徑優(yōu)先: Maven 會選擇最短路徑來解析依賴,以確保使用最直接、最適合的版本。
- 沖突解決: 當出現(xiàn)版本沖突時,Maven 會根據(jù)一定的規(guī)則進行解決,通常選擇最高版本的庫。
-
依賴傳遞終止:
- 依賴傳遞會一直進行,直到達到最底層的庫,這個庫沒有其他依賴為止。終止依賴傳遞的庫被稱為葉子節(jié)點。
- 通常,Java 標準庫是依賴傳遞的終止點,因為它們不再依賴其他庫。
2、案例:jackson 依賴
引入依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zibo</groupId>
<artifactId>mvn-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.16.1</version>
</dependency>
</dependencies>
</project>
Maven 倉庫詳情頁
IDEA 中查看 Maven 依賴關系
二、依賴沖突
1、概述
出現(xiàn)原因:直接或間接引入了相同的 jar 包!
沖突解決:自動能夠解決,可手動解決,但不推薦手動解決!
當直接引用或者間接引用出現(xiàn)了相同的 jar 包! 這時呢,一個項目就會出現(xiàn)相同的重復 jar 包,這就算作沖突!依賴沖突避免出現(xiàn)重復依賴,并且終止依賴傳遞!
Maven 自動解決依賴沖突問題能力,會按照自己的原則,進行重復依賴選擇。同時也提供了手動解決的沖突的方式,不過不推薦!
2、沖突解決的兩種方式
解決依賴沖突(如何選擇重復依賴)方式:
-
自動選擇原則
-
短路優(yōu)先原則(第一原則)
A—>B—>C—>D—>E—>X(version 0.0.1)
A—>F—>X(version 0.0.2)
則 A 依賴于 X(version 0.0.2)。
-
依賴路徑長度相同情況下,則“先聲明優(yōu)先”(第二原則)
A—>E—>X(version 0.0.1)
A—>F—>X(version 0.0.2)
在<depencies></depencies>中,先聲明的,路徑相同,會優(yōu)先選擇!文章來源:http://www.zghlxwxcb.cn/news/detail-787812.html
-
-
手動排除文章來源地址http://www.zghlxwxcb.cn/news/detail-787812.html
<dependency> <groupId>com.atguigu.maven</groupId> <artifactId>pro01-maven-java</artifactId> <version>1.0-SNAPSHOT</version> <scope>compile</scope> <!-- 使用excludes標簽配置依賴的排除 --> <exclusions> <!-- 在exclude標簽中配置一個具體的排除 --> <exclusion> <!-- 指定要排除的依賴的坐標(不需要寫version) --> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>
到了這里,關于【Maven】006-Maven 依賴傳遞和依賴沖突的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!