国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

關(guān)于Maven,你真的了解它嗎?

這篇具有很好參考價(jià)值的文章主要介紹了關(guān)于Maven,你真的了解它嗎?。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

編譯軟件: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)如下所示:

關(guān)于Maven,你真的了解它嗎?

1.3 Maven生命周期

Maven生命周期:

按照一定的順序執(zhí)行各個(gè)命令的過程

Maven生命周期包含以下三個(gè)部分組成:

  • Clean LifeCycle在進(jìn)行真正的項(xiàng)目構(gòu)建之前進(jìn)行的一些清理工作。

  • Default LifeCycle項(xiàng)目構(gòu)建的核心步驟包括編譯,測試,打包,安裝,部署等步驟。

關(guān)于Maven,你真的了解它嗎?

? 注意:

當(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)成如下:

    關(guān)于Maven,你真的了解它嗎?

  • 目標(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)用戶請求。

倉庫中存放的文件類型(以jar包為主):

  • Maven的插件
  • 第三方框架或工具的jar包
  • 自己研發(fā)的項(xiàng)目或模塊

關(guān)于Maven,你真的了解它嗎?

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>

注意:

g-a-v本地倉庫jar包的位置
a-vjar包的全名

關(guān)于Maven,你真的了解它嗎?

如何尋找相應(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)擊訪問它

關(guān)于Maven,你真的了解它嗎?

②找對應(yīng)版本的jar包的坐標(biāo)引用資源,沒有找到的話就回退第①步找下一個(gè)”usages“對應(yīng)的資源欄

關(guān)于Maven,你真的了解它嗎?

③找到對應(yīng)版本的jar包名稱,以然后點(diǎn)進(jìn)去(我這里以 junit 5.9.2版本為例),復(fù)制Maven欄下的代碼(坐標(biāo)引用內(nèi)容)

關(guān)于Maven,你真的了解它嗎?

④將復(fù)制的代碼粘貼到你要應(yīng)用的模塊中的pop.xml文件里的<dependencies></dependencies>標(biāo)簽內(nèi),IEDA會(huì)自動(dòng)在鏡像服務(wù)器中下載該版本的jar包資源

關(guān)于Maven,你真的了解它嗎?

關(guān)于Maven,你真的了解它嗎?


二. 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> 元素中使用以下值:

  1. compile:默認(rèn)值,表示依賴項(xiàng)在編譯、測試和運(yùn)行期間都可用。
  2. provided表示依賴項(xiàng)在編譯和測試期間可用,但是在運(yùn)行時(shí)由容器或環(huán)境提供。
  3. runtime表示依賴項(xiàng)在運(yùn)行時(shí)可用,但不需要在編譯時(shí)和測試時(shí)可用。
  4. test表示依賴項(xiàng)僅在測試代碼和源代碼(即 src/test/ 目錄)中使用,而不包括主要應(yīng)用程序代碼和資源。
  5. 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)目?

有兩條原則:

  1. 路徑最短者優(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包?

關(guān)于Maven,你真的了解它嗎?

①模塊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>

關(guān)于Maven,你真的了解它嗎?

  1. 先聲明者優(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>

關(guān)于Maven,你真的了解它嗎?


三. 在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>

關(guān)于Maven,你真的了解它嗎?

有一個(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)先【就近原則】。

如下所示:

關(guān)于Maven,你真的了解它嗎?

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>

關(guān)于Maven,你真的了解它嗎?


五. 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í)安裝它子工程)

安裝之前:

關(guān)于Maven,你真的了解它嗎?

安裝之后:

關(guān)于Maven,你真的了解它嗎?

關(guān)于Maven,你真的了解它嗎?

注意:

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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • IntelliJ IDEA編譯Maven工程:一步步詳解

    Apache Maven是一個(gè)流行的自動(dòng)化構(gòu)建工具,被廣泛應(yīng)用于Java項(xiàng)目的構(gòu)建管理中。IntelliJ IDEA作為一個(gè)功能強(qiáng)大的集成開發(fā)環(huán)境(IDE),它提供了對Maven工程的天然支持,并能簡化構(gòu)建過程。本文將詳細(xì)介紹如何在IntelliJ IDEA中編譯Maven工程。 首先確保你有一個(gè)已安裝的IntelliJ IDEA環(huán)

    2024年01月17日
    瀏覽(34)
  • 關(guān)于低代碼開發(fā),你是真的了解了嗎?

    關(guān)于低代碼開發(fā),你是真的了解了嗎?

    在低代碼開發(fā)已是大勢所趨的今天,不少企業(yè)都切身感受到了低代碼開發(fā)帶來的便利。低代碼開發(fā)平臺的優(yōu)勢在當(dāng)下數(shù)字化浪潮中,為企業(yè)提供了定制專屬的數(shù)字化解決方案。 低代碼本身沒有太強(qiáng)的行業(yè)屬性,這也讓低代碼開發(fā)平臺能夠更加靈活地適應(yīng)不同行業(yè)。目前低代碼

    2024年02月05日
    瀏覽(22)
  • 如何在Intellij-idea如何編譯maven工程

    在 IntelliJ IDEA 中編譯 Maven 工程,你需要遵循以下步驟: 打開 IntelliJ IDEA :首先,啟動(dòng) IntelliJ IDEA。 打開 Maven 項(xiàng)目 :在歡迎界面上,選擇 \\\"Get from Version Control\\\",然后選擇你的 Maven 項(xiàng)目的倉庫地址?;蛘?,如果你已經(jīng)有了項(xiàng)目文件(如? .idea ?和? pom.xml ),你可以直接打開這

    2024年01月18日
    瀏覽(99)
  • 編譯和鏈接(你真的了解符號決議和重定位嗎?)

    編譯和鏈接(你真的了解符號決議和重定位嗎?)

    快樂的流暢:個(gè)人主頁 個(gè)人專欄:《C語言》《數(shù)據(jù)結(jié)構(gòu)世界》《進(jìn)擊的C++》 遠(yuǎn)方有一堆篝火,在為久候之人燃燒! 在ANSI C的任何?種實(shí)現(xiàn)中,存在兩個(gè)不同的環(huán)境。 第1種是 翻譯環(huán)境 ,用于 源代碼被轉(zhuǎn)換為可執(zhí)行的機(jī)器指令 。 第2種是 執(zhí)行環(huán)境 ,用于實(shí)際執(zhí)行代碼。 那

    2024年01月22日
    瀏覽(7)
  • [Maven-POM]你真的懂POM文件嗎? | 一文帶你深入了解POM.XML

    ?作者介紹:大二本科網(wǎng)絡(luò)工程專業(yè)在讀,持續(xù)學(xué)習(xí)Java,努力輸出優(yōu)質(zhì)文章 ?作者主頁:@逐夢蒼穹 ?所屬專欄:JavaEE ?如果覺得文章寫的不錯(cuò),歡迎點(diǎn)個(gè)關(guān)注一鍵三連??有寫的不好的地方也歡迎指正,一同進(jìn)步?? 請查看我的這篇文章:[Java Web]Maven:一個(gè)管理和構(gòu)建Java項(xiàng)

    2024年02月07日
    瀏覽(21)
  • 關(guān)于 IntelliJ Maven error: Repository is non-nexus repo, or is not indexed (remote update error) 的問題

    今天用IDEA maven導(dǎo)入github上一個(gè)項(xiàng)目的包,報(bào)了 無法解析該依賴 的錯(cuò)誤 查看 File | Settings | Build, Execution, Deployment | Build Tools | Maven | Repositories 發(fā)現(xiàn)(r emote update error )無法更新遠(yuǎn)程庫,報(bào)錯(cuò)信息是 IntelliJ Maven error: Repository is non-nexus repo, or is not indexed 在互聯(lián)網(wǎng)上找了很久的解決

    2024年02月07日
    瀏覽(19)
  • 低代碼,你真的了解嗎?真的那么火嗎?

    低代碼,你真的了解嗎?真的那么火嗎?

    近幾年來,在國內(nèi)討論低代碼的場合越來越多,任何技術(shù)峰會(huì),少不了會(huì)提及低代碼甚至零代碼。 簡單地說,低代碼平臺是一種軟件開發(fā)工具,旨在讓用戶使用最少的編碼知識和手動(dòng)編程工作來構(gòu)建應(yīng)用程序。這些平臺提供了圖形化的用戶界面和可視化工具,使用戶能夠通過

    2024年02月03日
    瀏覽(19)
  • Maven(4)-利用intellij idea創(chuàng)建maven 多模塊項(xiàng)目

    Maven(4)-利用intellij idea創(chuàng)建maven 多模塊項(xiàng)目

    本文通過一個(gè)例子來介紹利用maven來構(gòu)建一個(gè)多模塊的jave項(xiàng)目。開發(fā)工具:intellij idea。 multi-module-project是主工程,里面包含兩個(gè)模塊(Module): web-app是應(yīng)用層,用于界面展示,依賴于web-service參的服務(wù)。 web-service層是服務(wù)層,用于給app層提供服務(wù)。 新建一個(gè)空白標(biāo)準(zhǔn)maven

    2024年02月04日
    瀏覽(101)
  • IntelliJ IDEA中下載Maven依賴、maven導(dǎo)入pom包

    IntelliJ IDEA中下載Maven依賴、maven導(dǎo)入pom包

    此方法可以在IDEA中重新下載Maven依賴 1.點(diǎn)擊IDEA界面右側(cè)Maven Projects 2.點(diǎn)擊小M圖標(biāo)(如下圖) 3.等待加載完成,有點(diǎn)長,需等待 4.最后點(diǎn)擊兩個(gè)箭頭的小圓圈刷新Reimport即可… idea 中 maven pom不自動(dòng)更新的5種解決方法_建仔的博客專欄-CSDN博客_idea pom 點(diǎn)擊加號導(dǎo)入pom文件 點(diǎn)擊 M

    2024年02月11日
    瀏覽(41)
  • 你真的了解低代碼嗎?

    你真的了解低代碼嗎?

    ?? 個(gè)人主頁: 不叫貓先生 ,公眾號: 前端舵手 ???♂? 作者簡介:2022年度博客之星前端領(lǐng)域TOP 2,前端領(lǐng)域優(yōu)質(zhì)作者、阿里云專家博主,專注于前端各領(lǐng)域技術(shù),共同學(xué)習(xí)共同進(jìn)步,一起加油呀! ??優(yōu)質(zhì)專欄: vue3+vite+typeScript從入門到實(shí)踐 ?? 資料領(lǐng)?。呵岸诉M(jìn)階資料

    2024年02月05日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包