Maven中的關係
阿新 • • 發佈:2020-11-27
Maven中的關係
繼承
一個Maven專案可以繼承另一個Maven專案,分別稱為子專案、父專案
場景:多個子專案中使用的是相同的依賴或外掛,此時可以把相同的配置抽取到一個父專案中,進行統一的管理,保持一致性
步驟:
-
將父專案的打包方式設定為pom
<!-- 打包方式: jar:Java專案的打包方式:預設值 war:Web專案的打包方式 pom:父專案的打包方式--> <packaging>jar</packaging>
-
在子專案中引用父專案,指定父專案的座標
<!-- 引用父專案,指定父專案的座標--> <parent> <groupId>org.example</groupId> <artifactId>parent</artifactId> <version>1.0-SNAPSHOT</version> <!-- 指定父專案的pom.xml檔案的相對物理路徑--> <relativePath>xx/xx/</relativePath> </parent>
問題:有時並不是父專案的所有依賴都需要被專案繼承,但是又希望能夠通過父專案對依賴進行統一管理,如版本的控制
解決:使用dependencyManagement標籤
步驟:
-
在父專案中配置dependencyManagement
<dependencyManagement> <dependencies> <dependency> <groupId>com.ljy</groupId> <artifactId>mysql..</artifactId> <version>12.52.</version> </dependency> </dependencies> </dependencyManagement>
-
在子專案中引用父專案中的依賴、
<dependencies>
<dependency>
<groupId>com.ljy</groupId>
<artifactId>mysql..</artifactId>
</dependency>
</dependencies>
聚合
將多個子專案新增到一個父專案中,然後通過對父專案進行操作,從而實現對所有聚合的子專案的操作
在父專案的pom中
<!-- 聚合子專案,指定子專案的根目錄--> <modules> <module>../...</module> <module>../...</module> </modules>
依賴(繼承)
專案C-->專案B-->專案A
概念:如果專案C依賴於專案B,專案B依賴專案A,則專案C也依賴於專案A,這叫依賴的傳遞
配置依賴關係:
<!-- 依賴於其他子專案child01-->
<dependency>
<groupId>com.ljy</groupId>
<artifactId>child01</artifactId>
<version>xx</version>
</dependency>
控制依賴的傳遞
並不是所有的依賴都會被傳遞
- scope為compile的依賴會傳遞
- scope為test的依賴不會被傳遞
- 配置optional為true的依賴不會被傳遞(不能寫在父專案中)
<dependency>
<groupId>com.ljy</groupId>
<artifactId>lof3</artifactId>
<optional>true</optional>
</dependency>
不會出現jar包的衝突
使用Maven不會出現jar包衝突,通過兩個原則來保證:
- 就近原則
- 優先定義原則(看是哪個依賴先寫,02與01的先後順序)
<dependency>
<groupId>com.ljy</groupId>
<artifactId>child01</artifactId>
<version>xx</version>
</dependency>
<dependency>
<groupId>com.ljy</groupId>
<artifactId>child02</artifactId>
<version>xx</version>
</dependency>
不要傳遞的依賴
方式1:在依賴的配置中配置不允許傳遞
<optional>true</optional>
方式2:在當前的專案中配置不接收傳遞的特定依賴
<dependency>
<!-- 不接收特定的依賴 -->
<exclusions>
<exclusion>
<groupId>xxx</groupId>
<artifacdId>xxx</artifacdId>
</exclusion>
</exclusions>
</dependency>