編譯軟件:IntelliJ IDEA 2019.2.4 x64
操作系統(tǒng):win10 x64 位 家庭版
Maven版本:apache-maven-3.6.3
一. Maven有哪些核心概念?
1.1 Maven中的POM
釋義:
POM,英文全稱為Project Object Model,意思是項(xiàng)目對象模型,就是將項(xiàng)目封裝為對象模型,便于開發(fā)者使用Maven管理構(gòu)建項(xiàng)目
常見POM標(biāo)簽:
代碼示例如下
<?xml version="1.0" encoding="UTF-8"?>
<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">
//設(shè)置父工程坐標(biāo)
<parent>
<artifactId>maven_test</artifactId>
<groupId>com.bd</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven_makefriend</artifactId>
//引入依賴(子工程的jar包或第三方庫庫)的坐標(biāo)
<dependencies>
<dependency>
<groupId>com.bd</groupId>
<artifactId>maven_make</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.bd</groupId>
<artifactId>maven_hellofriend</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
//定義依賴范圍
<scope>test</scope>
</dependency>
</dependencies>
</project>
1.2 Maven約定的目錄結(jié)構(gòu)
詳細(xì)目錄結(jié)構(gòu)如下所示:
1.3 Maven生命周期
Maven生命周期:
按照一定的順序執(zhí)行各個(gè)命令的過程
Maven生命周期包含以下三個(gè)部分組成:
-
Clean LifeCycle
:在進(jìn)行真正的項(xiàng)目構(gòu)建之前進(jìn)行的一些清理工作。 -
Default LifeCycle
:項(xiàng)目構(gòu)建的核心步驟包括編譯,測試,打包,安裝,部署等步驟。
? 注意:
當(dāng)你點(diǎn)擊“install”時(shí),前面會(huì)自”ccompile“依次按順序執(zhí)行到install時(shí)【紅框中的步
驟】,install才 會(huì)執(zhí)行安裝,它不是點(diǎn)擊”install“就會(huì)直接執(zhí)行安裝步驟。執(zhí)行clean
時(shí),它只會(huì)清除IDEA中maven模塊 下的target目錄,而不會(huì)刪除安裝在本地的jar包, 除非你手動(dòng)刪除。
-
Site LifeCycle
:生成項(xiàng)目報(bào)告,站點(diǎn),發(fā)布站點(diǎn)。
附注:
以上三個(gè)生命周期彼此之間互不干涉,相互獨(dú)立。每個(gè)生命周期階段都由一個(gè)或多個(gè)插件目標(biāo)組成。通過在 pom.xml文件中綁定插件和目標(biāo)到生命周期階段上,就可以使用一條命令來自動(dòng)化執(zhí)行所有構(gòu)建任務(wù)。
1.4 Maven的插件和目標(biāo)
-
插件
:它的本質(zhì)是由jar包和配置文件組成,如下圖所示例如插件maven-clean-plugin的構(gòu)成如下:
-
目標(biāo)
:每個(gè)插件都能實(shí)現(xiàn)多個(gè)功能,而每個(gè)功能就是一個(gè)插件目標(biāo)。例如:compile就是插件maven-compiler-plugin的一個(gè)功能;pre-clean是插件
maven-cean-plugin的一個(gè)目標(biāo)。
1.5 Maven中的倉庫
倉庫的分類:
-
本地倉庫
:為當(dāng)前計(jì)算機(jī)提供maven服務(wù) -
遠(yuǎn)程倉庫
:為其他計(jì)算機(jī)也可以提供maven服務(wù)-
私服:架設(shè)在當(dāng)前局域網(wǎng)環(huán)境下,為
當(dāng)前局域網(wǎng)范圍內(nèi)
的所有Maven工程服務(wù)。 -
中央倉庫:架設(shè)在Internet.上,為
全世界
所有Maven工程服務(wù)。 -
中央倉庫的鏡像:架設(shè)在各個(gè)大洲,為
中央倉庫
分擔(dān)流量。減輕中央倉庫的壓力,同時(shí)更快的響應(yīng)用戶請求。
-
私服:架設(shè)在當(dāng)前局域網(wǎng)環(huán)境下,為
倉庫中存放的文件類型(以jar包為主):
- Maven的插件
- 第三方框架或工具的jar包
- 自己研發(fā)的項(xiàng)目或模塊
1.6 Maven的坐標(biāo)
作用:
使用坐標(biāo)引入jar包
坐標(biāo)是如何構(gòu)成?
由g-a-v構(gòu)成
g --> groupld
:公司或組織的域名倒序+當(dāng)前項(xiàng)目名稱
a --> artifactld
:當(dāng)前項(xiàng)目的模塊名稱
v --> version
:當(dāng)前模塊的版本
pom.xml中相關(guān)代碼示例如下:
<parent>
<artifactId>maven_demo</artifactId>
<groupId>com.bd</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
注意:文章來源:http://www.zghlxwxcb.cn/news/detail-434566.html
g-a-v
:本地倉庫jar包的位置a-v
:jar包的全名
如何尋找相應(yīng)jar包的坐標(biāo)?
自己一個(gè)個(gè)在網(wǎng)上搜索?不不,效率太低了!
我們可以到 https://mvnrepository.com 或 https://central.sonatype.com 去查找相應(yīng)jar包的坐標(biāo)
如何使用上述兩個(gè)網(wǎng)站去搜索?
以 https://mvnrepository.com中搜索junit 的jar包的坐標(biāo)為例
①在搜素欄輸入你要找的jar包名稱,然后點(diǎn)擊”Search“,在搜索結(jié)果找 ”usages“
最多的那一欄(往往有我們需要的資源),然后點(diǎn)擊訪問它
②找對應(yīng)版本的jar包的坐標(biāo)引用資源,沒有找到的話就回退第①步找下一個(gè)”usages“對應(yīng)的資源欄
③找到對應(yīng)版本的jar包名稱,以然后點(diǎn)進(jìn)去(我這里以 junit 5.9.2版本為例),復(fù)制Maven欄下的代碼(坐標(biāo)引用內(nèi)容)
④將復(fù)制的代碼粘貼到你要應(yīng)用的模塊中的pop.xml文件里的
<dependencies></dependencies>
標(biāo)簽內(nèi),IEDA會(huì)自動(dòng)在鏡像服務(wù)器中下載該版本的jar包資源
二. Maven的依賴管理是什么?
Maven中的依賴是什么?
在 Maven 中,依賴(Dependency)是指項(xiàng)目需要的外部 JAR 文件或其他庫。而依賴管理就是指在 Maven 中為項(xiàng)目定義和管理依賴關(guān)系的過程。
為什么要進(jìn)行依賴管理?
通過使用依賴管理,Maven可以管理所有需要的 JAR和其他庫,并確保它們可以正確下載并與本地項(xiàng)目一起工作。可能會(huì)存在多個(gè)依賴項(xiàng)依賴同一個(gè)第三方庫的不同版本的場景,這時(shí)候需要根據(jù)項(xiàng)目需要的版本來選擇合適的依賴項(xiàng)版本,避免因版本沖突導(dǎo)致的問題。
2.1 依賴范圍
依賴語法:
<scope></scope>
可以在 <scope>
元素中使用以下值:
-
compile
:默認(rèn)值,表示依賴項(xiàng)在編譯、測試和運(yùn)行期間都可用。 -
provided
:表示依賴項(xiàng)在編譯和測試期間可用,但是在運(yùn)行時(shí)由容器或環(huán)境提供。 -
runtime
:表示依賴項(xiàng)在運(yùn)行時(shí)可用,但不需要在編譯時(shí)和測試時(shí)可用。 -
test
:表示依賴項(xiàng)僅在測試代碼和源代碼(即 src/test/ 目錄)中使用,而不包括主要應(yīng)用程序代碼和資源。 -
system
:表示依賴項(xiàng)類似于 provided,但從本地系統(tǒng)文件系統(tǒng)中獲得依賴項(xiàng),而不是從 Maven 倉庫下載。 需要通過<systemPath>
指定依賴項(xiàng)的路徑。
常用compile,test,provided的作用域范圍:
-
compile
:在main目錄下、test目錄下、Tomcat【服務(wù)器】下均有效。 -
test
:只能在test目錄下有效。 -
provided
:在main、test目錄下均有效,Tomcat【服務(wù)器】無效。
2.2 依賴的傳遞性
什么是依賴的傳遞性?
當(dāng)多個(gè)項(xiàng)目導(dǎo)入依賴時(shí),Maven會(huì)自動(dòng)處理依賴項(xiàng)之間的關(guān)系并保證項(xiàng)目的順利構(gòu)建。當(dāng)定義項(xiàng)目中的依賴項(xiàng)時(shí),它會(huì)自動(dòng)查找依賴項(xiàng)的依賴項(xiàng),并將其添加到 build path 中。這就是所謂的依賴項(xiàng)傳遞性,因?yàn)樗婕暗揭幌盗邢嗷ヒ蕾嚨膸熘g的自動(dòng)傳遞。
例如,如果你在項(xiàng)目中使用 Spring 框架,而Spring Framework 本身就有多個(gè)依賴項(xiàng),如 Spring Core,Spring Beans 和 Spring Context 等。但是,你不需要在 Maven 文件中分別指定所有這些依賴項(xiàng) - 只需僅提供對 Spring Framework 依賴的聲明即可。然后,Maven 就會(huì)自動(dòng)解決 Spring Framework 以及其所有依賴項(xiàng)的傳遞性,將它們引入到項(xiàng)目構(gòu)建路徑中。
那么Maven是如何查找項(xiàng)目中依賴項(xiàng)的依賴項(xiàng),進(jìn)而自動(dòng)引入到項(xiàng)目構(gòu)建路徑?或者說根據(jù)什么原則來處理依賴項(xiàng)之間的關(guān)系去構(gòu)建項(xiàng)目?
有兩條原則:
- 路徑最短者優(yōu)先【就近原則】
案例:在maven_test項(xiàng)目中定義三個(gè)maven模塊(maven_makefriend,maven_make與maven_hellofriend),其中模塊maven_hellofriend引入log4j 1.2.14的jar包,maven_make引入log4j 1.2.17的jar包,maven_makefriend模塊不引入log4j 的jar包;另外,模塊maven_hellofriend要依賴于模塊maven_make,模塊maven_makefriend依賴于模塊maven_hellofriend,觀察思考模塊maven_makefriend會(huì)應(yīng)用哪個(gè)版本的log4j
的jar包?
①模塊maven_make引入log4j 1.2.17的jar包并install至Maven的本地倉庫中 代碼示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>maven_test</artifactId>
<groupId>com.bd</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven_make</artifactId>
<dependencies>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
②在模塊maven_hellofriend引入log4j 1.2.14的jar包以及模塊maven_make的jar包
代碼示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>maven_test</artifactId>
<groupId>com.bd</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven_hellofriend</artifactId>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
//引入模塊maven_make的jar包
<dependency>
<groupId>com.bd</groupId>
<artifactId>maven_make</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
③ 模塊maven_makefriend依賴于模塊maven_hellofriend,在pop.xml中引入其jar包
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>maven_test</artifactId>
<groupId>com.bd</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven_makefriend</artifactId>
<dependencies>
//引入模塊maven_hellofriend的jar包
<dependency>
<groupId>com.bd</groupId>
<artifactId>maven_hellofriend</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
- 先聲明者優(yōu)先
案例:根據(jù)上述案例場景,其他代碼不變,假如模塊maven_makefriend在pop.xml中同時(shí)引入模塊maven_make與maven_hellofriend的jar包,那它會(huì)用哪個(gè)版本的log4j的jar包?
模塊maven_makefriend在pop.xml中同時(shí)引入模塊maven_make與maven_hellofriend的jar包
代碼示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>maven_test</artifactId>
<groupId>com.bd</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven_makefriend</artifactId>
<dependencies>
//同時(shí)引入模塊maven_make與maven_hellofriend的jar包
<dependency>
<groupId>com.bd</groupId>
<artifactId>maven_make</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.bd</groupId>
<artifactId>maven_hellofriend</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
三. 在Maven中如何統(tǒng)一管理依賴的版本號?
語法:
示例代碼如下
<properties>
<spring-version>5.3.17</spring-version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring-version]</version>
</dependency>
</dependencies>
ps:
這樣做的好處是只需要修改一處,即
<properties></properties>
內(nèi)的版本號,就可以修改多處的值,即<dependencies></dependencies>
內(nèi)所有應(yīng)用
${spring-version} 的值。在外面定義版本號,里面使用,然后統(tǒng)一管理,統(tǒng)一修改相關(guān)jar包的版本號,進(jìn)而提高編碼效率。
四. Maven中的繼承是什么?
4.1 為什么需要繼承?
原因:
如果有多個(gè)子工程都使用同一個(gè)jar包,則可以將該jar包提取到父工程中,使用【繼承原理】在子工程中使用,類似于Java中的子類繼承父類
注意:
父工程的打包方式【jar/war/pom】,必須是pom方式
4.2 Maven的繼承方式一
用法:
只需要在父工程中的pop.xml中引入指定jar包的坐標(biāo),那么它所有的子工程都默認(rèn)強(qiáng)制引入父工程中的所有jar包
案例:在父工程maven_demo內(nèi)創(chuàng)建兩個(gè)子工程(day01_mavenTest與day01_mavenTest1)與一個(gè)工程day01_mavenHello,在父工程內(nèi)的pop.xml里引入兩個(gè)jar包(junit
4.12和junit-jupiter-api 5.9.2),其他工程內(nèi)pop.xml不做任何jar包的坐標(biāo)引入,演示觀察繼承效果
示例代碼如下:
在父工程的pop.xml 引入兩個(gè)jar包的坐標(biāo)(junit 4.12和junit-jupiter-api 5.9.2)
//父工程的pop.xml 引入兩個(gè)jar包的坐標(biāo)(junit 4.12和junit-jupiter-api 5.9.2)
<?xml version="1.0" encoding="UTF-8"?>
<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>com.bd</groupId>
<artifactId>maven_demo</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>day01_mavenTest</module>
<module>day01_mavenTest1</module>
</modules>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
有一個(gè)問題?
假設(shè)在上述案例場景中,子工程day01_mavenTest1的pop.xml內(nèi)想要引入junit 4.11的jar包坐標(biāo),那么它的依賴目錄下會(huì)應(yīng)用從父工程繼承的junit 4.12 的jar包,還是在pop.xml中準(zhǔn)備引入的junit 4.11的jar包?
答案:子工程day01_mavenTest1的依賴中會(huì)應(yīng)用pop.xml中準(zhǔn)備引入的junit 4.11的jar包,原因是根據(jù)依賴的傳遞性規(guī)則中最短路徑者優(yōu)先【就近原則】。
如下所示:
4.3 Maven的繼承方式二
在該繼承方式中,子工程可以自由選擇應(yīng)用從父工程繼承的jar包資源
用法:
①在父工程中的pop.xml將導(dǎo)入的jar包放入
<dependencyManagement></dependencyManagement>
內(nèi)。
示例代碼如下:
//在父工程中的pop.xml里導(dǎo)入junit 4.12 的jar包,不過是放在
//dependencyManagement</dependencyManagement>內(nèi)
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
②在子工程中的pop.xml中引入父工程的相關(guān)jar包,要這樣寫(如下所示)
示例代碼如下:
<parent>
<artifactId>maven_demo</artifactId>
<groupId>com.atguigu</groupId>
<version>1.0-SNAPSHOT</version>
//加入下面的代碼,要寫父工程pop.xml的相對路徑
<relativePath>../pom.xml</relativePath>
</parent>
//注意不能加要引入jar包的版本號
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
注意: 絕對不能添加指定導(dǎo)入的jar包的版本號
案例:在父工程maven_demo內(nèi)創(chuàng)建兩個(gè)子工程(day01_mavenTest與day01_mavenTest1)與一個(gè)工程day01_mavenHello,在父工程內(nèi)的pop.xml里引入兩個(gè)jar包(junit
4.12和junit-jupiter-api 5.9.2),使用上述語法引入,子工程day01_mavenTest內(nèi)的pop.xml使用繼承方式二的語法引入父工程junit 4.12 的jar包的坐標(biāo)引,演示觀察繼承效果
①父工程maven_demo內(nèi)pop.xml中導(dǎo)入相關(guān)jar包
示例代碼如下:
<?xml version="1.0" encoding="UTF-8"?>
<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>com.bd</groupId>
<artifactId>maven_demo</artifactId>
//規(guī)定父工程的打包方式必須是pom
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>day01_mavenTest</module>
<module>day01_mavenTest1</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
②子工程day01_mavenTest的pop.xml內(nèi)指定引入夫父工程中junit 4.12 的jar包
示例代碼如下:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>maven_demo</artifactId>
<groupId>com.bd</groupId>
<version>1.0-SNAPSHOT</version>
<!-- 以相對路徑引入父工程pop.xml -->
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>day01_mavenTest</artifactId>
<!-- 指定導(dǎo)入父工程中的junit 4.12 的jar包 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
五. Maven 的聚合是什么?
釋義:
在 Maven 中,聚合(Aggregation)是將多個(gè)項(xiàng)目組織在一起構(gòu)建的一種特殊方式。這可以使多個(gè)項(xiàng)目成為單個(gè)構(gòu)建,在一個(gè)命令下執(zhí)行所有構(gòu)建步驟。
聚合通常用于處理具有相同構(gòu)建要求的多個(gè)項(xiàng)目。例如,大型應(yīng)用程序可能由多個(gè)模塊組成,每個(gè)模塊都需要編譯、測試、打包和部署成獨(dú)立的庫或組件。在這種情況下,可以將所有模塊配置為使用 Maven 聚合進(jìn)行構(gòu)建,并使用一個(gè)父級 pom.xml 文件來定義它們之間的關(guān)系。
5.1 如果不使用Maven的聚合,會(huì)發(fā)生什么?
如果不使用聚合功能,在項(xiàng)目中就不能管理多個(gè)子模塊,也不能一次性構(gòu)建整個(gè)代碼庫。此外,沒有聚合,每個(gè)模塊都需要單獨(dú)編譯、測試和部署,增加了工作量和復(fù)雜度。因此,使用Maven的聚合功能可以極大的簡化項(xiàng)目的管理并提高開發(fā)的效率。
5.2 使用Maven聚合的好處
好處:
只要將子工程聚合到父工程中,就可以實(shí)現(xiàn)效果(安裝或清除父工程時(shí),子工程會(huì)進(jìn)行同步操作)。換而言之,就是在點(diǎn)擊父工程的install 或 clean,安裝父工程的同時(shí),它的子工程也會(huì)同時(shí)安裝,clean時(shí) 一起 clean。
5.3 如何使用Maven的聚合?
Maven 使用
<modules>
元素管理所有相關(guān)的子工程(子模塊)。該元素包含一系列<module>
子元素,其中每個(gè)子元素指定要聚合的 Maven 項(xiàng)目的目錄名稱
語法:
代碼示例如下
<modules>
<module>day01_mavenTest</module>
<module>day01_mavenTest1</module>
</modules>
<modules>
元素下包含了兩個(gè)子元素,即 day01_mavenTest、day01_mavenTest1。這意味著 該pop.xml所在的Maven項(xiàng)目 將聚合這兩個(gè)項(xiàng)目,并在一個(gè)命令下一起執(zhí)行它們的構(gòu)建。
注意是在要將某一個(gè)Maven項(xiàng)目作為聚合的“容器”,它負(fù)責(zé)聚合容納其他要聚合的Maven項(xiàng)目,是身為“聚合容器”的Maven項(xiàng)目下的pop.xml里寫,類似Java中的抽象類與接口的概念
案例:演示Maven聚合的功能(點(diǎn)擊”install“功能 安裝父工程時(shí),則同時(shí)安裝它子工程)
安裝之前:
安裝之后:
注意:
Maven會(huì)按照依賴順序自動(dòng)安裝子工程文章來源地址http://www.zghlxwxcb.cn/news/detail-434566.html
到了這里,關(guān)于關(guān)于Maven,你真的了解它嗎?的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!