欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Maven的使用之繼承與聚合

 更新時間:2023年04月21日 10:21:07   作者:_GGBond_  
這篇文章主要為大家詳細(xì)介紹了Maven的繼承和聚合,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

一、實(shí)驗:繼承

1、概念

Maven工程之間,A 工程繼承 B 工程

B 工程:父工程
A 工程:子工程
本質(zhì)上是 A 工程的 pom.xml 中的配置繼承了 B 工程中 pom.xml 的配置。

2、作用

在父工程中統(tǒng)一管理項目中的依賴信息,具體來說是管理依賴信息的版本。

它的背景是:

對一個比較大型的項目進(jìn)行了模塊拆分。 一個 project 下面,創(chuàng)建了很多個 module。 每一個 module都需要配置自己的依賴信息。

它背后的需求是:

? 在每一個 module 中各自維護(hù)各自的依賴信息很容易發(fā)生出入,不易統(tǒng)一管理。
? 使用同一個框架內(nèi)的不同 jar包,它們應(yīng)該是同一個版本,所以整個項目中使用的框架版本需要統(tǒng)一。

? 使用框架時所需要的 jar包組合(或者說依賴信息組合)需要經(jīng)過長期摸索和反復(fù)調(diào)試,最終確定一個可用組合。這個耗費(fèi)很大精力總結(jié)出來的方案不應(yīng)該在新的項目中重新摸索。

通過在父工程中為整個項目維護(hù)依賴信息的組合既保證了整個項目使用規(guī)范、準(zhǔn)確的 jar 包;又能夠?qū)⒁酝慕?jīng)驗沉淀下來,節(jié)約時間和精力。

3、舉例

在一個工程中依賴多個 Spring 的 jar 包

TIP

使用 Spring 時要求所有 Spring 自己的 jar 包版本必須一致。為了能夠?qū)@些 jar 包的版本進(jìn)行統(tǒng)一管理,我們使用繼承這個機(jī)制,將所有版本信息統(tǒng)一在父工程中進(jìn)行管理。

4、操作

4.1 創(chuàng)建父工程

創(chuàng)建的過程和前面創(chuàng)建 pro01-maven-java 一樣。
工程名稱:pro03-maven-parent工程創(chuàng)建好之后,要修改它的打包方式:

 <groupId>com.atguigu.maven</groupId>
  <artifactId>pro03-maven-parent</artifactId>
  <version>1.0-SNAPSHOT</version>

  <!-- 當(dāng)前工程作為父工程,它要去管理子工程,所以打包方式必須是 pom -->
  <packaging>pom</packaging>

只有打包方式為 pom 的 Maven 工程能夠管理其他 Maven 工程。打包方式為 pom 的 Maven 工程中不寫業(yè)務(wù)代碼,它是專門管理其他 Maven 工程的工程

4.2 創(chuàng)建模塊工程

模塊工程類似于 IDEA 中的 module,所以需要進(jìn)入 pro03-maven-parent 工程的根目錄,然后運(yùn)行 mvn archetype:generate 命令來創(chuàng)建模塊工程。

假設(shè),我們創(chuàng)建三個模塊工程:

4.3 查看被添加新內(nèi)容的父工程 pom.xml

下面 modules 和 module 標(biāo)簽是聚合功能的配置

<modules>  
	<module>pro04-maven-module</module>
	<module>pro05-maven-module</module>
	<module>pro06-maven-module</module>
</modules>

4.4 解讀子工程的pom.xml

<!-- 使用parent標(biāo)簽指定當(dāng)前工程的父工程 -->
<parent>
	<!-- 父工程的坐標(biāo) -->
	<groupId>com.atguigu.maven</groupId>
	<artifactId>pro03-maven-parent</artifactId>
	<version>1.0-SNAPSHOT</version>
</parent>

<!-- 子工程的坐標(biāo) -->
<!-- 如果子工程坐標(biāo)中的groupId和version與父工程一致,那么可以省略 -->
<!-- <groupId>com.atguigu.maven</groupId> -->
<artifactId>pro04-maven-module</artifactId>
<!-- <version>1.0-SNAPSHOT</version> -->

4.5 在父工程中配置依賴的統(tǒng)一管理

<!-- 使用dependencyManagement標(biāo)簽配置對依賴的管理 -->
<!-- 被管理的依賴并沒有真正被引入到工程 -->
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>4.0.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>4.0.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.0.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>4.0.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>4.0.0.RELEASE</version>
		</dependency>
	</dependencies>
</dependencyManagement>

4.6 子工程中引用那些被父工程管理的依賴

關(guān)鍵點(diǎn):省略版本號

<!-- 子工程引用父工程中的依賴信息時,可以把版本號去掉。	-->
<!-- 把版本號去掉就表示子工程中這個依賴的版本由父工程決定。 -->
<!-- 具體來說是由父工程的dependencyManagement來決定。 -->
<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-beans</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-expression</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-aop</artifactId>
	</dependency>
</dependencies>

4.7 在父工程中升級依賴信息的版本

        	<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-beans</artifactId>
				<version>4.1.4.RELEASE</version>
			</dependency>

然后在子工程中運(yùn)行mvn dependency:list,效果如下:

TIP

4.8 在父工程中聲明自定義屬性

<!-- 通過自定義屬性,統(tǒng)一指定Spring的版本 -->
<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	
	<!-- 自定義標(biāo)簽,維護(hù)Spring版本數(shù)據(jù) -->
	<atguigu.spring.version>4.3.6.RELEASE</atguigu.spring.version>
</properties>

在需要的地方使用${}的形式來引用自定義的屬性名:

        	<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-core</artifactId>
				<version>${atguigu.spring.version}</version>
			</dependency>

真正實(shí)現(xiàn)“一處修改,處處生效”。

5、實(shí)際意義

編寫一套符合要求、開發(fā)各種功能都能正常工作的依賴組合并不容易。如果公司里已經(jīng)有人總結(jié)了成熟的組合方案,那么再開發(fā)新項目時,如果不使用原有的積累,而是重新摸索,會浪費(fèi)大量的時間。為了提高效率,我們可以使用工程繼承的機(jī)制,讓成熟的依賴組合方案能夠保留下來。

如上圖所示,公司級的父工程中管理的就是成熟的依賴組合方案,各個新項目、子系統(tǒng)各取所需即可。

二、實(shí)驗:聚合

1、聚合本身的含義

部分組成整體

動畫片《戰(zhàn)神金剛》中的經(jīng)典臺詞:“我來組成頭部!我來組成手臂!”就是聚合關(guān)系最生動的體現(xiàn)。

2、Maven 中的聚合

使用一個“總工程”將各個“模塊工程”匯集起來,作為一個整體對應(yīng)完整的項目。
? 項目:整體
? 模塊:部分

概念的對應(yīng)關(guān)系:

? 從繼承關(guān)系角度來看:

父工程 子工程

? 從聚合關(guān)系角度來看:

總工程 模塊工程

3、好處

? 一鍵執(zhí)行 Maven 命令:很多構(gòu)建命令都可以在“總工程”中一鍵執(zhí)行。

以 mvn install 命令為例:Maven要求有父工程時先安裝父工程;有依賴的工程時,先安裝被依賴的工程。我們自己考慮這些規(guī)則會很麻煩。但是工程聚合之后,在總工程執(zhí)行 mvn install 可以一鍵完成安裝,而且會自動按照正確的順序執(zhí)行。

? 配置聚合之后,各個模塊工程會在總工程中展示一個列表,讓項目中的各個模塊一目了然。

4、聚合的配置

在總工程中配置 modules 即可:

<modules>  
		<module>pro04-maven-module</module>
		<module>pro05-maven-module</module>
		<module>pro06-maven-module</module>
	</modules>

5、依賴循環(huán)問題

如果 A 工程依賴 B 工程,B 工程依賴 C 工程,C 工程又反過來依賴 A 工程,那么在執(zhí)行構(gòu)建操作時會報下面的錯誤:

[ERROR] [ERROR] The projects in the reactor contain a cyclic reference:

這個錯誤的含義是:循環(huán)引用。

以上就是Maven的使用之繼承與聚合的詳細(xì)內(nèi)容,更多關(guān)于Maven繼承與聚合的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中的this和super實(shí)例淺析

    Java中的this和super實(shí)例淺析

    要說this和super就不得不說Java的封裝和繼承了。這篇文章主要介紹了Java中的this和super實(shí)例淺析,需要的朋友可以參考下
    2017-03-03
  • Java實(shí)現(xiàn)單鏈表的操作

    Java實(shí)現(xiàn)單鏈表的操作

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)單鏈表的操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Mybatis中<if>和<choose>的區(qū)別及“=”判斷方式

    Mybatis中<if>和<choose>的區(qū)別及“=”判斷方式

    這篇文章主要介紹了Mybatis中<if>和<choose>的區(qū)別及“=”判斷方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • FastJson實(shí)現(xiàn)駝峰下劃線相互轉(zhuǎn)換方法詳解

    FastJson實(shí)現(xiàn)駝峰下劃線相互轉(zhuǎn)換方法詳解

    這篇文章主要介紹了使用FastJson進(jìn)行駝峰下劃線相互轉(zhuǎn)換寫法及誤區(qū),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • Java中callable的實(shí)現(xiàn)原理

    Java中callable的實(shí)現(xiàn)原理

    本文主要介紹了Java里的callable的實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • 淺談java日志格式化

    淺談java日志格式化

    不管我們使用何種語言開發(fā),一旦程序發(fā)生異常,日志是一個很重要的數(shù)據(jù)。但是并不是意味著打印的日志越多越好,我們需要的是有用的日志。下面小編來和大家一起學(xué)習(xí)以下知識
    2019-05-05
  • 使用Servlet Filter實(shí)現(xiàn)系統(tǒng)登錄權(quán)限

    使用Servlet Filter實(shí)現(xiàn)系統(tǒng)登錄權(quán)限

    這篇文章主要為大家詳細(xì)介紹了使用Servlet Filter實(shí)現(xiàn)系統(tǒng)登錄權(quán)限,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 關(guān)于Spring總結(jié)(必看篇)

    關(guān)于Spring總結(jié)(必看篇)

    下面小編就為大家?guī)硪黄P(guān)于Spring總結(jié)(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 用Java實(shí)現(xiàn)簡單計算器功能

    用Java實(shí)現(xiàn)簡單計算器功能

    這篇文章主要為大家詳細(xì)介紹了用Java實(shí)現(xiàn)簡單計算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 基于SpringBoot和Vue寫一個2048小游戲

    基于SpringBoot和Vue寫一個2048小游戲

    創(chuàng)建一個基于 Java Spring Boot 后端和 Vue 前端的 2048 游戲,可以按照以下步驟進(jìn)行,這個項目將包括后端(用來處理游戲邏輯)和前端(用來顯示游戲界面和與用戶交互),感興趣的小伙伴可以參考本文自己動手嘗試一下
    2024-08-08

最新評論