maven 學習總結(五)——聚合與繼承
一、聚合
如果我們想一次構建多個專案模組,那我們就需要對多個專案模組進行聚合
1.1、聚合配置程式碼
<modules>
<module>模組一</module>
<module>模組二</module>
<module>模組三</module>
</modules>
例如:對專案的Hello、HelloFriend、MakeFriends這三個模組進行聚合
<modules>
<module>../Hello</module>
<module>../HelloFriend</module>
<module>../MakeFriends</module>
</modules>
其中module的路徑為相對路徑。
二、繼承
繼承為了消除重複,我們把很多相同的配置提取出來,例如:grouptId,version等
2.1、繼承配置程式碼
<parent>
<groupId>me.gacl.maven</groupId>
<artifactId>ParentProject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../ParentProject/pom.xml</relativePath>
</parent>
2.2、繼承程式碼中定義屬性
繼承程式碼過程中,可以定義屬性,例如:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>4.9</junit.version>
<maven.version>0.0.1-SNAPSHOT</maven.version>
</properties>
訪問屬性的方式為${junit.version},例如:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
2.3、父模組用dependencyManagement進行管理
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>cn.itcast.maven</groupId>
<artifactId>HelloFriend</artifactId>
<version>${maven.version}</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
</dependencies>
</dependencyManagement>
這樣的好處是子模組可以有選擇行的繼承,而不需要全部繼承。
三、聚合與繼承的關係
聚合主要為了快速構建專案,繼承主要為了消除重複
四、聚合與繼承實戰演練
建立四個Maven專案,如下圖所示:
這四個專案放在同一個目錄下,方便後面進行聚合和繼承
Parent專案是其它三個專案的父專案,主要是用來配置一些公共的配置,其它三個專案再通過繼承的方式擁有Parent專案中的配置,首先配置Parent專案的pom.xml,新增對專案的Hello、HelloFriend、MakeFriends這三個模組進行聚合以及jar包依賴,pom.xml的配置資訊如下:
Parent專案的pom.xml配置
<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>me.gacl.maven</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Parent</name>
<url>http://maven.apache.org</url>
<!-- 對專案的Hello、HelloFriend、MakeFriends這三個模組進行聚合 -->
<modules>
<module>../Hello</module>
<module>../HelloFriend</module>
<module>../MakeFriends</module>
</modules>
<!-- 定義屬性 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>4.9</junit.version>
<maven.version>0.0.1-SNAPSHOT</maven.version>
</properties>
<!-- 用dependencyManagement進行jar包依賴管理 -->
<dependencyManagement>
<!-- 配置jar包依賴 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- 訪問junit.version屬性 -->
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>me.gacl.maven</groupId>
<artifactId>Hello</artifactId>
<!-- 訪問maven.version屬性 -->
<version>${maven.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>me.gacl.maven</groupId>
<artifactId>HelloFriend</artifactId>
<!-- 訪問maven.version屬性 -->
<version>${maven.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
在Hello專案的pom.xml中繼承Parent專案的pom.xml配置
<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>
<artifactId>Hello</artifactId>
<!-- 繼承Parent專案中的pom.xml配置 -->
<parent>
<groupId>me.gacl.maven</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 使用相對路徑 -->
<relativePath>../Parent/pom.xml</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
在HelloFriend專案的pom.xml中繼承Parent專案的pom.xml配置
<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>
<artifactId>HelloFriend</artifactId>
<name>HelloFriend</name>
<!-- 繼承Parent專案中的pom.xml配置 -->
<parent>
<groupId>me.gacl.maven</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../Parent/pom.xml</relativePath>
</parent>
<dependencies>
<dependency>
<!-- Parent專案的pom.xml檔案配置中已經指明瞭要使用的Junit的版本號,因此在這裡新增junit的依賴時,
可以不指明<version></version>和<scope>test</scope>,會直接從Parent專案的pom.xml繼承 -->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!-- HelloFriend專案中使用到了Hello專案中的類,因此需要新增對Hello.jar的依賴
Hello.jar的<version>和<scope>也已經在Parent專案的pom.xml檔案配置中已經指明瞭
因此這裡也可以省略不寫了
-->
<dependency>
<groupId>me.gacl.maven</groupId>
<artifactId>Hello</artifactId>
</dependency>
</dependencies>
</project>
在MakeFriends專案的pom.xml中繼承Parent專案的pom.xml配置
<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>
<artifactId>MakeFriends</artifactId>
<!-- 繼承Parent專案中的pom.xml配置 -->
<parent>
<groupId>me.gacl.maven</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../Parent/pom.xml</relativePath>
</parent>
<dependencies>
<dependency>
<!-- Parent專案的pom.xml檔案配置中已經指明瞭要使用的Junit的版本號,因此在這裡新增junit的依賴時,
可以不指明<version></version>和<scope>test</scope>,會直接從Parent專案的pom.xml繼承 -->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<!-- MakeFriends專案中使用到了HelloFriend專案中的類,因此需要新增對HelloFriend.jar的依賴
HelloFriend.jar的<version>和<scope>也已經在Parent專案的pom.xml檔案配置中已經指明瞭
因此這裡也可以省略不寫了
-->
<groupId>me.gacl.maven</groupId>
<artifactId>HelloFriend</artifactId>
</dependency>
</dependencies>
</project>
以上的四個專案的pom.xml經過這樣的配置之後,就完成了在Parent專案中聚合Hello、HelloFriend、MakeFriends這三個子專案(子模組),而Hello、HelloFriend、MakeFriends這三個子專案(子模組)也繼承了Parent專案中的公共配置,這樣就可以使用Maven一次性構建所有的專案了,如下圖所示:
選中Parent專案的pom.xml檔案→【Run As】→【Maven install】,這樣Maven就會一次性同時構建Parent、Hello、HelloFriend、MakeFriends這四個專案,如下圖所示:
相關文章
- Maven 聚合與繼承Maven繼承
- 前端學習輯錄(1):js繼承總結前端JS繼承
- Maven學習總結Maven
- JavaScript繼承總結JavaScript繼承
- JS中繼承方式總結JS中繼繼承
- JAVA入門學習初步總結3 方法類繼承多型等Java繼承多型
- 學習一下Sass @extend 與 繼承繼承
- JavaScript 學習之繼承JavaScript繼承
- Maven中dependency和plugins的繼承與約束MavenPlugin繼承
- 多繼承 與 多重繼承繼承
- JavaScript 型別、原型與繼承學習筆記JavaScript型別原型繼承筆記
- 《Java核心技術》第五章 繼承 學習筆記Java繼承筆記
- JS物件導向:JS繼承方法總結JS物件繼承
- Java 自學 - 介面與繼承 介面Java繼承
- IntelliJ Idea14 建立Maven多模組專案,多繼承,熱部署配置總結(一)IntelliJIdeaMaven繼承熱部署
- Head First Java學習筆記(7):繼承與多型Java筆記繼承多型
- oop類的繼承與類靜態成員學習OOP繼承
- JS 總結之原型繼承的幾種方式JS原型繼承
- CSS學習摘要-層疊和繼承CSS繼承
- 九. Go學習:Go中的繼承Go繼承
- java學習——物件導向之繼承Java物件繼承
- js 繼承小結JS繼承
- 資料結構 其五 樹與二叉樹學習總結資料結構二叉樹
- 【MyBatis學習總結 (五),動態SQL】MyBatisSQL
- 學習Java的第五週總結Java
- odoo 繼承(owl繼承、web繼承、view繼承)Odoo繼承WebView
- PHP 手冊 (類與物件) 學習筆記七:物件繼承PHP物件筆記繼承
- 《Java從入門到失業》第五章:繼承與多型(5.1-5.7):繼承Java繼承多型
- Java繼承練習Java繼承
- 繼承與多型繼承多型
- Python學習手冊之類和繼承Python繼承
- Solidity語言學習筆記————34、繼承Solid筆記繼承
- C++學習筆記——C++ 繼承C++筆記繼承
- 學習Java中遇到的繼承問題Java繼承
- 實驗五 繼承和多型繼承多型
- 深入學習之連結與總結
- 繼承、抽象個人小結繼承抽象
- Elasticsearch聚合學習之五:排序結果不準的問題分析Elasticsearch排序
- Maven 總結Maven