最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Maven的使用之繼承與聚合

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

一、實驗:繼承

1、概念

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

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

2、作用

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

它的背景是:

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

它背后的需求是:

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

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

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

3、舉例

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

TIP

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

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,所以需要進入 pro03-maven-parent 工程的根目錄,然后運行 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)鍵點:省略版本號

<!-- 子工程引用父工程中的依賴信息時,可以把版本號去掉。	-->
<!-- 把版本號去掉就表示子工程中這個依賴的版本由父工程決定。 -->
<!-- 具體來說是由父工程的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>

然后在子工程中運行mvn dependency:list,效果如下:

TIP

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

<!-- 通過自定義屬性,統(tǒng)一指定Spring的版本 -->
<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	
	<!-- 自定義標(biāo)簽,維護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>

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

5、實際意義

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

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

二、實驗:聚合

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的使用之繼承與聚合的詳細內(nèi)容,更多關(guān)于Maven繼承與聚合的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java發(fā)送內(nèi)嵌圖片郵件

    java發(fā)送內(nèi)嵌圖片郵件

    這篇文章主要介紹了java發(fā)送內(nèi)嵌圖片郵件,在博客系統(tǒng)中需要郵件服務(wù)的功能,僅僅是發(fā)送文本內(nèi)容,現(xiàn)在嘗試一下發(fā)送內(nèi)嵌圖片郵件,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 自定義注解+Spel實現(xiàn)分布式鎖方式

    自定義注解+Spel實現(xiàn)分布式鎖方式

    這篇文章主要介紹了自定義注解+Spel實現(xiàn)分布式鎖方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot3整合Druid監(jiān)控功能的項目實踐

    SpringBoot3整合Druid監(jiān)控功能的項目實踐

    Druid連接池作為一款強大的數(shù)據(jù)庫連接池,提供了豐富的監(jiān)控和管理功能,成為很多Java項目的首選,本文主要介紹了SpringBoot3整合Druid監(jiān)控功能的項目實踐,感興趣的可以了解一下
    2024-01-01
  • SpringCloud Eureka 服務(wù)注冊實現(xiàn)過程

    SpringCloud Eureka 服務(wù)注冊實現(xiàn)過程

    這篇文章主要介紹了SpringCloud Eureka 服務(wù)注冊實現(xiàn)過程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • 詳解IDEA中Debug的使用和進制轉(zhuǎn)換問題

    詳解IDEA中Debug的使用和進制轉(zhuǎn)換問題

    這篇文章主要介紹了IDEA中Debug的使用和進制轉(zhuǎn)換,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Spring Boot集成Java DSL的實現(xiàn)代碼

    Spring Boot集成Java DSL的實現(xiàn)代碼

    這篇文章主要介紹了Spring Boot集成Java DSL的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • java使用IO流對數(shù)組排序?qū)嵗v解

    java使用IO流對數(shù)組排序?qū)嵗v解

    在本篇文章里小編給大家整理的是一篇關(guān)于java使用IO流對數(shù)組排序?qū)嵗v解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-02-02
  • 淺析Java中靜態(tài)代理和動態(tài)代理的應(yīng)用與區(qū)別

    淺析Java中靜態(tài)代理和動態(tài)代理的應(yīng)用與區(qū)別

    代理模式在我們生活中很常見,而Java中常用的兩個的代理模式就是動態(tài)代理與靜態(tài)代理,這篇文章主要為大家介紹了二者的應(yīng)用與區(qū)別,需要的可以參考下
    2023-08-08
  • 30條Java代碼編寫經(jīng)驗分享

    30條Java代碼編寫經(jīng)驗分享

    你知道寫好Java代碼的30條經(jīng)驗是什么嗎?這篇文章主要為大家分享了30條Java代碼編寫經(jīng)驗技巧,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • MyBatis攔截器的實現(xiàn)原理

    MyBatis攔截器的實現(xiàn)原理

    這篇文章主要介紹了MyBatis攔截器的實現(xiàn)原理,Mybatis攔截器并不是每個對象里面的方法都可以被攔截的,其具體內(nèi)容感興趣的小伙伴課題參考一下下面文章內(nèi)容
    2022-08-08

最新評論

中江县| 古浪县| 莱州市| 长乐市| 庆安县| 盐津县| 盐亭县| 漾濞| 百色市| 霍林郭勒市| 武宣县| 新密市| 苏尼特右旗| 秦皇岛市| 禹州市| 新兴县| 安陆市| 十堰市| 开封市| 紫金县| 钟祥市| 苏州市| 乾安县| 乌苏市| 阿拉尔市| 霍城县| 淮滨县| 新乡县| 尚义县| 通海县| 江西省| 家居| 桑植县| 秦皇岛市| 措美县| 古丈县| 稷山县| 明溪县| 陇西县| 寻乌县| 博罗县|