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

Maven的依賴(lài)管理、傳遞、沖突、父子工程的繼承和聚合方式

 更新時(shí)間:2025年06月11日 10:02:25   作者:雷神樂(lè)樂(lè)  
這篇文章主要介紹了Maven的依賴(lài)管理、傳遞、沖突、父子工程的繼承和聚合方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、基于IDEA 進(jìn)行Maven依賴(lài)管理

(一)依賴(lài)管理概念

我們?cè)趶木W(wǎng)上下載需要的依賴(lài)的時(shí)候,不同的jar包與jar包之間有依賴(lài)關(guān)系,且不同的版本之間也需要注意是否有沖突,使用Maven就可以幫助我們?nèi)ス芾砗妥詣?dòng)解決軟件包依賴(lài)問(wèn)題,我們只需要關(guān)注我們需要的jar包和版本即可。

通過(guò)定義 POM 文件,Maven 能夠自動(dòng)解析項(xiàng)目的依賴(lài)關(guān)系,并通過(guò) Maven 倉(cāng)庫(kù)自動(dòng)下載和管理依賴(lài),從而避免了手動(dòng)下載和管理依賴(lài)的繁瑣工作和可能引發(fā)的版本沖突問(wèn)題。

總之,Maven 的依賴(lài)管理使得軟件包依賴(lài)的管理,和使用更加智能和方便,簡(jiǎn)化了開(kāi)發(fā)過(guò)程中的工作,并提高了軟件質(zhì)量和可維護(hù)性。

(二)Maven工程核心信息配置和解讀(GAVP)

位置:pom.xml

<!-- 模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者組織的唯一標(biāo)志,并且配置時(shí)生成的路徑也是由此生成, 
如com.companyname.project-group,maven會(huì)將該項(xiàng)目打成的jar包放本地路徑:
/com/companyname/project-group -->
<groupId>com.companyname.project-group</groupId>
<!-- 項(xiàng)目的唯一ID,一個(gè)groupId下面可能多個(gè)項(xiàng)目,就是靠artifactId來(lái)區(qū)分的 -->
<artifactId>project</artifactId>
<!-- 版本號(hào) -->
<version>1.0.0</version>

<!--打包方式
    默認(rèn):jar
    jar指的是普通的java項(xiàng)目打包方式, 項(xiàng)目打成jar包
    war指的是web項(xiàng)目打包方式,項(xiàng)目打成war包
    pom不會(huì)將項(xiàng)目打包,這個(gè)項(xiàng)目作為父工程,被其他工程聚合或者繼承
-->
<packaging>jar/pom/war</packaging>

(三)Maven工程依賴(lài)管理配置

位置:pom.xml

1.依賴(lài)管理和依賴(lài)添加

<!-- 
   通過(guò)編寫(xiě)依賴(lài)jar包的gav必要屬性,引入第三方依賴(lài)!
   scope屬性是可選的,可以指定依賴(lài)生效范圍!
   依賴(lài)信息查詢(xún)方式:
      1. maven倉(cāng)庫(kù)信息官網(wǎng) https://mvnrepository.com/
      2. mavensearch插件搜索
 -->
<dependencies>
    <!-- 引入具體的依賴(lài)包 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
        <!-- 依賴(lài)范圍 -->
        <scope>runtime</scope>
    </dependency>

</dependencies>

2.依賴(lài)版本統(tǒng)一提取和維護(hù)

Maven中,有個(gè)<properties>標(biāo)簽,該標(biāo)簽用于定義項(xiàng)目構(gòu)建過(guò)程中可以使用的屬性。

通過(guò)在properties標(biāo)簽中自定義管理依賴(lài)的版本號(hào),方便我們統(tǒng)一管理各種依賴(lài)的版本,當(dāng)需要升級(jí)或更改依賴(lài)版本時(shí),只需在<properties>標(biāo)簽中修改一次,而不需要逐個(gè)查找并替換POM文件中的每個(gè)依賴(lài)標(biāo)簽,這大大提高了維護(hù)的效率。

<properties>  
  <!-- 通過(guò)maven規(guī)定的固定的key,配置maven的參數(shù):-->
  <maven.compiler.source>11</maven.compiler.source>
  <maven.compiler.target>11</maven.compiler.target>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <!--聲明版本:命名隨便,內(nèi)部制定版本號(hào)即可-->
  <junit.version>5.9.2</junit.version>
</properties>

<dependencies>
  <dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <!--引用properties聲明版本 -->
    <version>${junit.version}</version>
    <!--引用依賴(lài)的運(yùn)行范圍(盡量不要更改) -->
    <scope>test</scope>
  </dependency>
</dependencies>

(四)依賴(lài)范圍

通過(guò)設(shè)置坐標(biāo)的依賴(lài)范圍(scope),可以設(shè)置對(duì)應(yīng)jar包的作用范圍(三種classpath):編譯環(huán)境(在main包下)、測(cè)試環(huán)境(在test包下)、運(yùn)行環(huán)境(打包后的jar包或war包是否有對(duì)應(yīng)的依賴(lài)包)。

scope標(biāo)簽中的依賴(lài)范圍可以修改,但是不建議,在https://mvnrepository.com/中搜索出來(lái)的依賴(lài)范圍是什么,就是什么,盡量不要修改!

依賴(lài)范圍描述
compile編譯依賴(lài)范圍,scope 元素的缺省值,即如果下載的依賴(lài)沒(méi)有scope標(biāo)簽,默認(rèn)是compile范圍。使用此依賴(lài)范圍的 Maven 依賴(lài),對(duì)于三種 classpath 均有效,即該 Maven 依賴(lài)在上述三種 classpath 均會(huì)被引入。例如,log4j 在編譯、測(cè)試、運(yùn)行過(guò)程都是必須的。
test測(cè)試依賴(lài)范圍。使用此依賴(lài)范圍的 Maven 依賴(lài),只對(duì)測(cè)試 classpath 有效。例如,Junit 依賴(lài)只有在測(cè)試階段才需要。
provided已提供依賴(lài)范圍。使用此依賴(lài)范圍的 Maven 依賴(lài),只對(duì)編譯 classpath 和測(cè)試 classpath 有效。例如,servlet-api 依賴(lài)對(duì)于編譯、測(cè)試階段而言是需要的,但是運(yùn)行階段,由于外部容器已經(jīng)提供,故不需要 Maven 重復(fù)引入該依賴(lài)。
runtime運(yùn)行時(shí)依賴(lài)范圍。使用此依賴(lài)范圍的 Maven 依賴(lài),只對(duì)測(cè)試 classpath、運(yùn)行 classpath 有效。例如,JDBC 驅(qū)動(dòng)實(shí)現(xiàn)依賴(lài),其在編譯時(shí)只需 JDK 提供的 JDBC 接口即可,只有測(cè)試、運(yùn)行階段才需要實(shí)現(xiàn)了 JDBC 接口的驅(qū)動(dòng)。
system系統(tǒng)依賴(lài)范圍,其效果與 provided 的依賴(lài)范圍一致。其用于添加非 Maven 倉(cāng)庫(kù)的本地依賴(lài),通過(guò)依賴(lài)元素 dependency 中的 systemPath 元素指定本地依賴(lài)的路徑。鑒于使用其會(huì)導(dǎo)致項(xiàng)目的可移植性降低,一般不推薦使用。
import導(dǎo)入依賴(lài)范圍,該依賴(lài)范圍只能與 dependencyManagement 元素配合使用,其功能是將目標(biāo) pom.xml 文件中 dependencyManagement 的配置導(dǎo)入合并到當(dāng)前 pom.xml 的 dependencyManagement 中。

(五)Maven工程依賴(lài)下載失敗錯(cuò)誤解決(重點(diǎn))

1.依賴(lài)下載失敗的主要原因

  • 下載依賴(lài)時(shí)出現(xiàn)網(wǎng)絡(luò)故障或倉(cāng)庫(kù)服務(wù)器宕機(jī)等原因,導(dǎo)致無(wú)法連接至 Maven 倉(cāng)庫(kù),從而無(wú)法下載依賴(lài)。
  • 依賴(lài)項(xiàng)的版本號(hào)或配置文件中的版本號(hào)錯(cuò)誤,或者依賴(lài)項(xiàng)沒(méi)有正確定義,導(dǎo)致 Maven 下載的依賴(lài)項(xiàng)與實(shí)際需要的不一致,從而引發(fā)錯(cuò)誤。
  • 本地 Maven 倉(cāng)庫(kù)或緩存被污染或損壞,導(dǎo)致 Maven 無(wú)法正確地使用現(xiàn)有的依賴(lài)項(xiàng)。

2.解決方案

  • 檢查網(wǎng)絡(luò)連接和 Maven 倉(cāng)庫(kù)服務(wù)器狀態(tài)。
  • 確保依賴(lài)項(xiàng)的版本號(hào)與項(xiàng)目對(duì)應(yīng)的版本號(hào)匹配,并檢查 POM 文件中的依賴(lài)項(xiàng)是否正確。
  • 清除本地 Maven 倉(cāng)庫(kù)緩存(lastUpdated 文件),因?yàn)橹灰嬖趌astupdated緩存文件,刷新也不會(huì)重新下載。本地倉(cāng)庫(kù)中,根據(jù)依賴(lài)的gav屬性依次向下查找文件夾,最終刪除內(nèi)部的文件,刷新重新下載即可!

(六)Maven工程Build構(gòu)建配置

項(xiàng)目構(gòu)建是指將源代碼、依賴(lài)庫(kù)和資源文件等轉(zhuǎn)換成可執(zhí)行或可部署的應(yīng)用程序的過(guò)程,在這個(gè)過(guò)程中包括編譯源代碼、鏈接依賴(lài)庫(kù)、打包和部署等多個(gè)步驟。(將一系列的原材料生產(chǎn)為一個(gè)產(chǎn)品,即打成jar包或war包的過(guò)程)

默認(rèn)情況下,構(gòu)建不需要額外配置,都有對(duì)應(yīng)的缺省配置。當(dāng)然了,我們也可以在pom.xml定制一些配置,來(lái)修改默認(rèn)構(gòu)建的行為和產(chǎn)物。

例如:

  • 指定構(gòu)建打包文件的名稱(chēng),非默認(rèn)名稱(chēng)
  • 制定構(gòu)建打包時(shí),指定包含文件格式和排除文件
  • 打包插件版本過(guò)低,配置更高版本插件

構(gòu)建配置是在pom.xml / build標(biāo)簽中指定!

1.指定打包命名

<!-- 默認(rèn)的打包名稱(chēng):artifactid+verson.打包方式 -->
<build>
  <finalName>定義打包名稱(chēng)</finalName>
</build>  

使用案例:不指定打包名稱(chēng)默認(rèn)是maven_web-1.0-SNAPSHOT.war

2.指定打包文件

如果在java文件夾中添加java類(lèi),resources文件夾中添加配置文件,即默認(rèn)情況下,按照maven工程結(jié)構(gòu)放置的文件,會(huì)默認(rèn)被編譯和打包到classes文件夾下

但是如果我們不按照要求將文件放在對(duì)應(yīng)的文件夾下,又想要將文件打包到classes中,例如mybatis中有時(shí)會(huì)將用于編寫(xiě)SQL語(yǔ)句的映射文件,和mapper接口都寫(xiě)在src/main/java下的某個(gè)包中,此時(shí)映射文件也不會(huì)被打包。

解決方案:使用resources標(biāo)簽,指定要打包資源的文件夾,要把哪些靜態(tài)資源打包到 classes根目錄下。

<build>
    <!--設(shè)置要打包的資源位置-->
    <resources>
        <resource>
            <!--設(shè)置資源所在目錄-->
            <directory>src/main/java</directory>
            <includes>
                <!--設(shè)置包含的資源類(lèi)型-->
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
</build>

此時(shí),不在resources文件夾下的文件也被成功打包!

3.配置依賴(lài)插件

dependencies標(biāo)簽下引入開(kāi)發(fā)需要的jar包,我們可以在build/plugins/plugin標(biāo)簽引入插件。常用的插件:修改jdk版本、tomcat插件、mybatis分頁(yè)插件、mybatis逆向工程插件等等。pom.xml文件中配置了tomcat插件,就可以省略在Edit Configurations中配置tomcat了。

具體步驟參考我的另一篇文章:《Maven3.8.1使用Tomcat8插件啟動(dòng)項(xiàng)目的方法(親測(cè)有效)

二、Maven依賴(lài)傳遞

(一)Maven依賴(lài)傳遞特性

概念

假如有Maven項(xiàng)目A,項(xiàng)目B依賴(lài)A,項(xiàng)目C依賴(lài)B。那么我們可以說(shuō) C依賴(lài)A。也就是說(shuō),依賴(lài)的關(guān)系為:C—>B—>A, 那么我們執(zhí)行項(xiàng)目C時(shí),會(huì)自動(dòng)把B、A都下載導(dǎo)入到C項(xiàng)目的jar包文件夾中,這就是依賴(lài)的傳遞性。

作用

  • 簡(jiǎn)化依賴(lài)導(dǎo)入過(guò)程
  • 確保依賴(lài)版本正確

案例演示:

創(chuàng)建2個(gè)項(xiàng)目,maven_A和maven_B:

在maven_A的pom.xml文件中引入maven_B的坐標(biāo):

在maven_B的pom.xml文件中配置druid依賴(lài),更新maven,發(fā)現(xiàn)maven_A項(xiàng)目中也能使用druid

使用mvn dependency:tree命令也可以查看依賴(lài)關(guān)系:

也可以使用下面的命令在文件中查看依賴(lài)關(guān)系:

mvn dependency:build-classpath > classpath.txt

(二)傳遞的原則

在 A 依賴(lài) B,B 依賴(lài) C 的前提下,C 是否能夠傳遞到 A,取決于 B 依賴(lài) C 時(shí)使用的依賴(lài)范圍以及配置:只有scope標(biāo)簽是compile的才能傳遞,test和provided依賴(lài)范圍都不能傳遞,需要手動(dòng)配置!scope標(biāo)簽中的依賴(lài)范圍可以修改,但是不建議,在https://mvnrepository.com/中搜索出來(lái)的依賴(lài)范圍是什么,就是什么,盡量不要修改!

另外,還有依賴(lài)傳遞的終止標(biāo)簽:<optional>true</optional>

若配置了optional標(biāo)簽,則不能傳遞

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.8</version>
    <optional>true</optional>
</dependency>

(三)依賴(lài)傳遞終止的三個(gè)條件

  • 非compile范圍進(jìn)行依賴(lài)傳遞
  • 使用optional配置終止傳遞
  • 依賴(lài)沖突(傳遞的依賴(lài)已經(jīng)存在)

三、Maven依賴(lài)沖突

當(dāng)直接引用或者間接引用出現(xiàn)了相同的jar包! 這時(shí)呢,一個(gè)項(xiàng)目就會(huì)出現(xiàn)相同的重復(fù)jar包,這就算作沖突!依賴(lài)沖突避免出現(xiàn)重復(fù)依賴(lài),并且終止依賴(lài)傳遞!

maven自動(dòng)解決依賴(lài)沖突問(wèn)題能力,會(huì)按照自己的原則,進(jìn)行重復(fù)依賴(lài)選擇。同時(shí)也提供了手動(dòng)解決的沖突的方式,不過(guò)不推薦!

解決依賴(lài)沖突(如何選擇重復(fù)依賴(lài))方式

1.自動(dòng)選擇原則

1.1依賴(lài)沖突之短路優(yōu)先原則
  • 短路優(yōu)先原則(第一原則)
  • A—>B—>C—>D—>E—>X(version 0.0.1)
  • A—>F—>X(version 0.0.2)
  • 則A依賴(lài)于X(version 0.0.2)。

示例:

maven_B的pom.xml:

<dependencies>
    <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.8</version>
    </dependency>
</dependencies>

maven_A的pom.xml:

<dependencies>
    <dependency>
        <groupId>com.alibaba.maven</groupId>
        <artifactId>maven_B</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.7</version>
    </dependency>
</dependencies>

查看maven_A的依賴(lài)樹(shù):maven_B中的druid 1.2.8版本被排除,maven_A中使用的是druid 1.2.7

如果你的重復(fù)依賴(lài)沒(méi)有置灰,把maven_A的pom.xml文件中,dependencies下的所有dependency清空,刷新后重新添加依賴(lài),就能看到置灰的依賴(lài)了,重復(fù)依賴(lài)沒(méi)有置灰是IDEA的顯示問(wèn)題。

1.2依賴(lài)沖突之聲明優(yōu)先原則
  • 依賴(lài)路徑長(zhǎng)度相同情況下,則“先聲明優(yōu)先”(第二原則)
  • A—>E—>X(version 0.0.1)
  • A—>F—>X(version 0.0.2)
  • 在<depencies></depencies>中,先聲明的,路徑相同,會(huì)優(yōu)先選擇!
  • 在A的pom.xml文件中,如果先配置E,那么就使用的是0.0.1版本!
  • 如果先配置F,那么就使用的是0.0.2版本!

示例:

創(chuàng)建項(xiàng)目maven_C,其pom.xml文件如下:

<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.7</version>
    </dependency>
</dependencies>

maven_B的pom.xml:

<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.8</version>
    </dependency>
</dependencies>

maven_A的pom.xml:

<dependencies>
    <dependency>
        <groupId>com.alibaba.maven</groupId>
        <artifactId>maven_B</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba.maven</groupId>
        <artifactId>maven_C</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

查看maven_A的依賴(lài)樹(shù):maven_B先聲明,就使用maven_B的druid 1.2.8版本

調(diào)換一下:

<dependencies>
    <dependency>
        <groupId>com.alibaba.maven</groupId>
        <artifactId>maven_C</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba.maven</groupId>
        <artifactId>maven_B</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

查看maven_A的依賴(lài)樹(shù):maven_C先聲明,就使用maven_C的druid 1.2.7版本

2.手動(dòng)排除

我們知道,先聲明的就會(huì)被先使用,如果只想使用maven_C中的druid 1.2.7的依賴(lài),可以手動(dòng)排除依賴(lài),使用exclusions標(biāo)簽,里面可以嵌套多個(gè)exclusion標(biāo)簽,exclusion標(biāo)簽中只需寫(xiě)明要排除的G和A坐標(biāo)即可:

<dependencies>
    <dependency>
        <groupId>com.alibaba.maven</groupId>
        <artifactId>maven_B</artifactId>
        <version>1.0-SNAPSHOT</version>
        <!--依賴(lài)排除-->
        <exclusions>
            <exclusion>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>com.alibaba.maven</groupId>
        <artifactId>maven_C</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

查看依賴(lài)樹(shù):maven_B中的druid 1.2.8被成功排除!

四、Maven工程繼承和聚合關(guān)系

(一)Maven工程繼承關(guān)系

1.繼承概念

Maven 繼承是指在 Maven 的項(xiàng)目中,讓一個(gè)項(xiàng)目從另一個(gè)項(xiàng)目中繼承配置信息的機(jī)制。繼承可以讓我們?cè)诙鄠€(gè)項(xiàng)目中共享同一配置信息,簡(jiǎn)化項(xiàng)目的管理和維護(hù)工作。

2.繼承作用與背景

在父工程中統(tǒng)一管理項(xiàng)目中的依賴(lài)信息。

它的背景是:

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

它背后的需求是:

  • 對(duì)一個(gè)比較大型的項(xiàng)目進(jìn)行了模塊拆分。
  • 一個(gè) project 下面,創(chuàng)建了很多個(gè) module。
  • 每一個(gè) module 都需要配置自己的依賴(lài)信息。
  • 在每一個(gè) module 中各自維護(hù)各自的依賴(lài)信息很容易發(fā)生出入,不易統(tǒng)一管理。
  • 使用同一個(gè)框架內(nèi)的不同 jar 包,它們應(yīng)該是同一個(gè)版本,所以整個(gè)項(xiàng)目中使用的框架版本需要統(tǒng)一。
  • 使用框架時(shí)所需要的 jar 包組合(或者說(shuō)依賴(lài)信息組合)需要經(jīng)過(guò)長(zhǎng)期摸索和反復(fù)調(diào)試,最終確定一個(gè)可用組合。這個(gè)耗費(fèi)很大精力總結(jié)出來(lái)的方案不應(yīng)該在新的項(xiàng)目中重新摸索。 通過(guò)在父工程中為整個(gè)項(xiàng)目維護(hù)依賴(lài)信息的組合既保證了整個(gè)項(xiàng)目使用規(guī)范、準(zhǔn)確的 jar 包;又能夠?qū)⒁酝慕?jīng)驗(yàn)沉淀下來(lái),節(jié)約時(shí)間和精力。

創(chuàng)建一個(gè)父工程——maven_parent:

<groupId>com.alibaba.maven</groupId>
<artifactId>maven_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 當(dāng)前工程作為父工程,它要去管理子工程,所以打包方式必須是 pom -->
<packaging>pom</packaging>

創(chuàng)建一個(gè)子工程——maven_son:

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

<!-- 子工程的坐標(biāo) -->
<!-- 如果子工程坐標(biāo)中的groupId和version與父工程一致,那么可以省略 -->
<artifactId>maven_son</artifactId>

創(chuàng)建好子工程maven_son后,父工程maven_parent的pom.xml文件也會(huì)發(fā)生改變:

<groupId>com.alibaba.maven</groupId>
<artifactId>maven_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 創(chuàng)建子工程時(shí),選擇父工程后,會(huì)在父工程中自動(dòng)生成: -->
<modules>
    <module>maven_son</module>
</modules>
<!-- 當(dāng)前工程作為父工程,它要去管理子工程,所以打包方式必須是 pom -->
<packaging>pom</packaging>

在父工程maven_parent添加依賴(lài):

<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.7</version>
    </dependency>
</dependencies>

子工程會(huì)無(wú)條件繼承父工程中的依賴(lài):

甚至包括scope是test和provide的:

3.父工程依賴(lài)統(tǒng)一管理

在使用父工程的時(shí)候,一般很少直接使用dependencies,讓所有依賴(lài)直接被子工程繼承,而是使用dependencyManagement來(lái)統(tǒng)一管理依賴(lài):

<!-- 使用dependencyManagement標(biāo)簽配置對(duì)依賴(lài)的管理 -->
<!-- 被管理的依賴(lài)并沒(méi)有真正被引入到工程 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.7</version>
        </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>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

此時(shí)子工程中就需要手動(dòng)選擇需要繼承父工程中的依賴(lài):

<!-- 子工程引用父工程中的依賴(lài)信息時(shí),可以把版本號(hào)去掉。  -->
<!-- 把版本號(hào)去掉就表示子工程中這個(gè)依賴(lài)的版本由父工程決定。 -->
<!-- 具體來(lái)說(shuō)是由父工程的dependencyManagement來(lái)決定。 -->
<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
    </dependency>
</dependencies>

(二)Maven工程聚合關(guān)系

1.聚合概念

Maven 聚合是指將多個(gè)項(xiàng)目組織到一個(gè)父級(jí)項(xiàng)目中,以便一起構(gòu)建和管理的機(jī)制。聚合可以幫助我們更好地管理一組相關(guān)的子項(xiàng)目,同時(shí)簡(jiǎn)化它們的構(gòu)建和部署過(guò)程。

2.聚合作用

  • 管理多個(gè)子項(xiàng)目:通過(guò)聚合,可以將多個(gè)子項(xiàng)目組織在一起,方便管理和維護(hù)。
  • 構(gòu)建和發(fā)布一組相關(guān)的項(xiàng)目:通過(guò)聚合,可以在一個(gè)命令中構(gòu)建和發(fā)布多個(gè)相關(guān)的項(xiàng)目,簡(jiǎn)化了部署和維護(hù)工作。
  • 優(yōu)化構(gòu)建順序:通過(guò)聚合,可以對(duì)多個(gè)項(xiàng)目進(jìn)行順序控制,避免出現(xiàn)構(gòu)建依賴(lài)混亂導(dǎo)致構(gòu)建失敗的情況。
  • 統(tǒng)一管理依賴(lài)項(xiàng):通過(guò)聚合,可以在父項(xiàng)目中管理公共依賴(lài)項(xiàng)和插件,避免重復(fù)定義。

3.聚合語(yǔ)法與使用方法

父項(xiàng)目中包含的子項(xiàng)目列表。

當(dāng)我們對(duì)父工程進(jìn)行了操作,比如package打包,里面的子工程也會(huì)進(jìn)行相同的操作,提高開(kāi)發(fā)效率。

<groupId>com.alibaba.maven</groupId>
<artifactId>maven_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
    <module>maven_son</module>
    <module>../maven_A</module>
    <module>../maven_web</module>
</modules>
<!-- 當(dāng)前工程作為父工程,它要去管理子工程,所以打包方式必須是 pom -->
<packaging>pom</packaging>

父工程執(zhí)行package命令:

對(duì)應(yīng)的子工程會(huì)一鍵打包:

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Intellij IDEA 如何通過(guò)數(shù)據(jù)庫(kù)表生成帶注解的實(shí)體類(lèi)(圖文詳細(xì)教程)

    Intellij IDEA 如何通過(guò)數(shù)據(jù)庫(kù)表生成帶注解的實(shí)體類(lèi)(圖文詳細(xì)教程)

    這篇文章主要介紹了Intellij IDEA 如何通過(guò)數(shù)據(jù)庫(kù)表生成帶注解的實(shí)體類(lèi)(圖文詳細(xì)教程),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java數(shù)組的定義、初始化、及二維數(shù)組用法分析

    Java數(shù)組的定義、初始化、及二維數(shù)組用法分析

    這篇文章主要介紹了Java數(shù)組的定義、初始化、及二維數(shù)組用法,結(jié)合具體實(shí)例形式分析了java數(shù)組概念、功能、數(shù)組定義、靜態(tài)數(shù)組、動(dòng)態(tài)數(shù)組、二維數(shù)組等相關(guān)使用技巧,需要的朋友可以參考下
    2019-01-01
  • Java基礎(chǔ)之容器LinkedList

    Java基礎(chǔ)之容器LinkedList

    這篇文章主要介紹了Java基礎(chǔ)之容器LinkedList,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 如何在SpringBoot項(xiàng)目中使用Oracle11g數(shù)據(jù)庫(kù)

    如何在SpringBoot項(xiàng)目中使用Oracle11g數(shù)據(jù)庫(kù)

    這篇文章主要介紹了在SpringBoot項(xiàng)目中使用Oracle11g數(shù)據(jù)庫(kù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java的繪圖模式使用淺析

    Java的繪圖模式使用淺析

    這篇文章主要介紹了Java的繪圖模式使用淺析,以一個(gè)小例子大概列舉了XOR模式下能干的一些事情,需要的朋友可以參考下
    2015-10-10
  • Java中鎖的分類(lèi)與使用方法

    Java中鎖的分類(lèi)與使用方法

    這篇文章主要給大家介紹了關(guān)于Java中鎖分類(lèi)與使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 詳解PipedInputStream和PipedOutputStream_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    詳解PipedInputStream和PipedOutputStream_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了管道PipedInputStream和PipedOutputStream,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • SpringBoot2.3集成ELK7.1.0的示例代碼

    SpringBoot2.3集成ELK7.1.0的示例代碼

    這篇文章主要介紹了SpringBoot2.3集成ELK7.1.0的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java常用函數(shù)式接口總結(jié)

    Java常用函數(shù)式接口總結(jié)

    今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著Java常用函數(shù)式接口展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Mac環(huán)境下JDK版本切換的詳細(xì)指南

    Mac環(huán)境下JDK版本切換的詳細(xì)指南

    這篇文章主要介紹了在macOS上管理多JDK版本的方法:通過(guò)java_home工具查詢(xún)路徑、臨時(shí)切換版本、永久配置環(huán)境變量,以及使用SDKMAN等工具實(shí)現(xiàn)更便捷的版本管理,需要的朋友可以參考下
    2025-07-07

最新評(píng)論

汤阴县| 宝丰县| 遂川县| 集安市| 澎湖县| 芦溪县| 蓬安县| 宁波市| 高雄县| 始兴县| 昌邑市| 出国| 郴州市| 同仁县| 岑溪市| 贵港市| 红河县| 桦川县| 孝感市| 将乐县| 莱芜市| 潢川县| 贵德县| 思南县| 兴义市| 元氏县| 澄城县| 周至县| 肃南| 留坝县| 来宾市| 通山县| 九江县| 什邡市| 襄垣县| 葫芦岛市| 安图县| 罗定市| 莱州市| 武山县| 淅川县|