Maven
- 1、分模塊設計
- 2、Maven繼承
- 2.1 繼承關系
- 2.2 版本鎖定
- 3、Maven聚合
- 4、聚合與繼承的關系
1、分模塊設計
如果一個項目中含有大量的功能模塊。可以考慮將這些功能分模塊設計,逐一進行開發。例如將公共類可以定義在一個項目中,將通用工具類也放在一個項目中,其他業務模塊需要使用這些類或者工具,只需要在pom文件中引入它們的依賴坐標。
<dependencies><dependency><groupId>組織ID</groupId><artifactId>項目</artifactId><version>版本</version></dependency>...<dependency><groupId>組織ID</groupId><artifactId>項目</artifactId><version>版本</version></dependency>
</dependencies>
2、Maven繼承
2.1 繼承關系
在一個大型項目中,子模塊非常多,如果這些子模塊都需要一個共同的依賴,那么可以給這些子模塊的父工程的pom文件中加入這項依賴,子模塊中就不需要再加這個依賴了。這是因為子模塊繼承了父工程的pom文件中的依賴。
Maven繼承的作用就是簡化依賴配置,統一管理依賴;
指定繼承關系,需要在子工程的pom文件中加入
<parent><!-- 父工程坐標 2.3.3--><groupId>組織ID</groupId><artifactId>項目</artifactId><version>版本</version><relativePath>父工程pom文件相對路徑</relativePath>
</parent>
父工程需要指定打包方式為pom。在父工程pom文件中加:
<packaging>pom</packaging>
注意,如果父工程與子工程都引入了同一個依賴的不同版本,以子工程的為準。
2.2 版本鎖定
在Maven中,可以在父工程的pom文件中通過dependencyManagement標簽來統一管理依賴版本。
例如在一個大型項目中,有部分子模塊引入了同一個依賴,當要改變依賴版本時,則需要在所有子模塊中查找是否引入了這個依賴,這個過程相當繁瑣。這時就可以通過Maven的版本鎖定來解決這個問題。
子模塊引入依賴時不指定版本,只需指定groupId和artifactId。把版本交給父工程管理。
在父工程中使用dependencyManagement標簽管理版本:
<dependencyManagement><dependencies><dependency><groupId>組織ID</groupId><artifactId>項目</artifactId><version>指定版本</version> </dependency>...</dependencies>
</dependencyManagement>
dependencyManagement標簽只會管理依賴版本,不會直接把依賴加入進來。
自定義屬性與屬性引用
自定義屬性與屬性引用方便集中統一管理依賴版本。
通過properties標簽自定義屬性:
<!-- 自定義屬性 -->
<properties><jjwt.version>0.9.1</jjwt.version><lombok.version>1.18.24</lombok.version>
</properties>
通過${…}引用屬性:
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jwtt.version}</version>
</dependency>
3、Maven聚合
在分模塊開發時,如果需要打包一個項目,那么這個項目依賴的其他子項目需要先安裝在Maven本地,父工程也需要安裝在本地,再對此項目進行打包操作。這個操作比較復雜。所以Maven聚合實現一鍵構建,一鍵打包,一鍵運行。
聚合,也就是將多個模塊組織成一個整體,同時進行項目構建。
聚合工程:一個不具有業務功能的“空”工程(有且僅有一個pom文件)。一般父工程會同時起到聚合工程的作用。
聚合工程的作用就是快速構建項目,無需根據依賴關系手動構建,直接在聚合工程上構建即可。
Maven中通過modules標簽設置當前聚合工程所包含的子模塊名稱。
<!--- 聚合 --->
<modules><module> 子模塊相對路徑 </module><module>../prj_utils</module><module>../prj_common</module>...
</modules>
4、聚合與繼承的關系
- 作用:
- 聚合用于快速構建項目
- 繼承用于簡化依賴配置,統一管理依賴
- 相同點 :
- 聚合與繼承的pom.xml文件打包方式均為pom,可以將兩種關系制作到同一個pom文件中。
- 聚合與繼承均屬于設計型模塊,并無實際的模塊內容
- 不同點:
- 聚合是在聚合工程中配置關系,聚合可以感知到參與聚合的模塊有哪些
- 繼承是在子模塊中配置關系,父模塊無法感知哪些子模塊繼承了自己