依賴傳遞
阿新 • • 發佈:2021-08-13
1、依賴傳遞的概念
pom.xml 中引入的依賴,在構建或執行時所有必要的類和資源都會自動新增到專案的 classpath 中。
Maven 中的依賴是有傳遞(Transitive)性的,預設會包含傳遞的依賴,這樣就不用手動引用每一個依賴了。比如下面這個依賴關係中,A 依賴 B,B 依賴了 C……,如果你依賴 A 的話,就會自動包含 A/B/C/D/E。
2、依賴傳遞存在的問題
由於傳遞依賴,D 2.0
和D 1.0
都會被加入 ClassPath 中,但因為它們版本不同,很可能會有包衝突等一系列問題。
3、解決依賴傳遞的方式
解決這個依賴傳遞導致的衝突問題,有兩種方案:
(1)在使用者,也就是發起依賴方進行排除
<dependency> <groupId>group-a</groupId> <artifactId>artifact-a</artifactId> <version>1.0</version> <exclusions> <exclusion> <groupId>group-c</groupId> <artifactId>excluded-artifact</artifactId> </exclusion> </exclusions> </dependency>
(2)在提供方,將依賴的範圍定義為不傳遞,這樣在構建時就不會包含這些不傳遞的依賴包了。也有兩種方式:
使用<scope>provided</scope>
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.0</version> <scope>provided</scope> </dependency>
使用<optional>true</optional>
<dependency> <groupId>com.coohua.caf</groupId> <artifactId>caf-boot-starter-web</artifactId> <optional>true</optional> </dependency>