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

Maven項目中pom.xml父子模塊配置小結(jié)

 更新時間:2025年08月24日 10:35:14   作者:hqxstudying  
Maven父子模塊結(jié)構(gòu)通過pom.xml實現(xiàn)配置復(fù)用、版本統(tǒng)一和批量構(gòu)建,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在 Maven 項目中,pom.xml的父子模塊結(jié)構(gòu)是實現(xiàn)項目模塊化管理的核心機制,主要用于解決配置復(fù)用、版本統(tǒng)一、批量構(gòu)建等問題。下面從概念、配置、作用及示例等方面詳細講解:

一、核心概念:父 POM 與子 POM

  • 父 POM(Parent POM):相當(dāng)于 "模板",定義了公共配置(如依賴版本、插件、屬性等),供子模塊繼承。
  • 子 POM(Child POM):繼承父 POM 的配置,專注于自身模塊的特有配置(如模塊專屬依賴、資源等)。

父子關(guān)系本質(zhì)是繼承關(guān)系,同時父模塊通常還承擔(dān)聚合角色(通過modules標(biāo)簽管理子模塊,實現(xiàn)批量構(gòu)建)。

二、父 POM 的特點與配置

父 POM 的核心作用是抽取公共配置,避免子模塊重復(fù)編寫。其配置有以下特點:

1. 打包類型必須為pom

父模塊本身不生成代碼產(chǎn)物(如 JAR/WAR),僅用于管理,因此packaging標(biāo)簽必須設(shè)為pom

<packaging>pom</packaging> 

2. 定義公共配置(供子模塊繼承)

父 POM 中可定義的公共配置包括:

  • properties:統(tǒng)一管理版本號、路徑等常量(子模塊可直接引用)。
  • dependencyManagement:聲明依賴版本(子模塊引用時無需指定版本,統(tǒng)一由父模塊管控)。
  • pluginManagement:聲明插件版本(類似依賴管理,子模塊引用插件時無需指定版本)。
  • build:公共的構(gòu)建配置(如資源目錄、插件等,子模塊可繼承或覆蓋)。

3. 聚合子模塊(modules標(biāo)簽)

父模塊通過modules標(biāo)簽列出所有子模塊的相對路徑,實現(xiàn) "一鍵構(gòu)建所有子模塊"(聚合功能)。
例如,父模塊目錄下有user-serviceorder-service兩個子模塊:

<modules>
  <!-- 子模塊的相對路徑(指向子模塊目錄) -->
  <module>user-service</module>
  <module>order-service</module>
</modules>

三、子 POM 的特點與配置

子模塊通過parent標(biāo)簽明確繼承的父模塊,從而復(fù)用父 POM 的配置。

1. 聲明父模塊(parent標(biāo)簽)

子 POM 必須通過parent標(biāo)簽指定父模塊的groupIdartifactId、version(這三者唯一標(biāo)識父模塊),示例:

<parent>
  <!-- 父模塊的坐標(biāo) -->
  <groupId>com.example</groupId>
  <artifactId>parent-project</artifactId>
  <version>1.0.0</version>
  <!-- 父POM的相對路徑(默認../pom.xml,可省略) -->
  <relativePath>../pom.xml</relativePath>
</parent>
  • relativePath:指定父 POM 的位置(默認查找父目錄的pom.xml),若找不到則從 Maven 倉庫下載。

2. 子模塊的特有配置

子模塊可省略與父模塊相同的groupIdversion(自動繼承),只需定義自身的artifactId和特有配置:

<!-- 繼承父模塊的groupId和version,可省略 -->
<artifactId>user-service</artifactId>
<packaging>jar</packaging> <!-- 子模塊通常為jar/war -->
 
<!-- 引用父模塊dependencyManagement中聲明的依賴(無需寫version) -->
<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 版本由父模塊的dependencyManagement管控 -->
  </dependency>
</dependencies>

四、關(guān)鍵區(qū)別:繼承 vs 聚合

父子模塊中,繼承聚合是兩個獨立但常結(jié)合使用的概念:

  • 繼承:子模塊復(fù)用父模塊的配置(解決 "配置重復(fù)" 問題)。
  • 聚合:父模塊通過modules管理子模塊(解決 "批量構(gòu)建" 問題)。

一個父模塊可以只做聚合(不被繼承),也可以只被繼承(不做聚合),但實際開發(fā)中通常兩者結(jié)合(既當(dāng)父模塊又當(dāng)聚合模塊)。

五、完整示例

假設(shè)項目結(jié)構(gòu)如下:

parent-project/          # 父模塊目錄
├── pom.xml              # 父POM
├── user-service/        # 子模塊1
│   └── pom.xml
└── order-service/       # 子模塊2
    └── pom.xml

父 POM(parent-project/pom.xml)

<?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>
 
    <!-- 父模塊坐標(biāo) -->
    <groupId>com.example</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging> <!-- 父模塊必須為pom -->
    <name>Parent Project</name>
 
    <!-- 聚合子模塊 -->
    <modules>
        <module>user-service</module>
        <module>order-service</module>
    </modules>
 
    <!-- 公共屬性(版本號等) -->
    <properties>
        <java.version>11</java.version>
        <spring-boot.version>2.7.0</spring-boot.version>
    </properties>
 
    <!-- 依賴版本管理(子模塊引用時無需寫version) -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${spring-boot.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
 
    <!-- 公共插件配置 -->
    <build>
        <pluginManagement> <!-- 插件版本管理 -->
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

子 POM(user-service/pom.xml)

<?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>
 
    <!-- 繼承父模塊 -->
    <parent>
        <groupId>com.example</groupId>
        <artifactId>parent-project</artifactId>
        <version>1.0.0</version>
        <relativePath>../pom.xml</relativePath> <!-- 父POM的位置 -->
    </parent>
 
    <!-- 子模塊自身坐標(biāo)(繼承了groupId和version,只需寫artifactId) -->
    <artifactId>user-service</artifactId>
    <name>User Service</name>
 
    <!-- 引用父模塊管理的依賴(無需版本) -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 子模塊特有依賴 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version> <!-- 父模塊未管理,需顯式指定 -->
        </dependency>
    </dependencies>
 
    <!-- 繼承父模塊的插件配置(也可覆蓋) -->
    <build>
        <plugins>
            <!-- 引用父模塊pluginManagement中的插件(無需版本) -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

六、總結(jié)

父子 POM 結(jié)構(gòu)的核心價值在于:

  1. 配置復(fù)用:公共配置(版本、插件)集中在父 POM,減少重復(fù)代碼。
  2. 版本統(tǒng)一:通過dependencyManagementpluginManagement確保所有子模塊依賴版本一致,避免沖突。
  3. 批量操作:父模塊通過modules聚合子模塊,支持 "一鍵構(gòu)建 / 打包所有子模塊"。

實際開發(fā)中,Spring Boot 的spring-boot-starter-parent就是典型的父 POM,通過繼承它可以快速獲得 Spring Boot 的默認配置。

到此這篇關(guān)于Maven項目中pom.xml父子模塊配置小結(jié)的文章就介紹到這了,更多相關(guān)Maven pom.xml父子模塊配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java前端傳base64,后臺轉(zhuǎn)成文件并存儲的實現(xiàn)

    java前端傳base64,后臺轉(zhuǎn)成文件并存儲的實現(xiàn)

    文章介紹了如何實現(xiàn)一個單獨的H5頁面用于手繪簽名并上傳服務(wù)器,包括如何從掃碼跳轉(zhuǎn)的鏈接中截取參數(shù)以及如何將字節(jié)碼轉(zhuǎn)換為文件上傳
    2026-02-02
  • java實現(xiàn)俄羅斯方塊

    java實現(xiàn)俄羅斯方塊

    這篇文章主要為大家詳細介紹了java實現(xiàn)俄羅斯方塊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • java的新特性反射機制應(yīng)用及操作示例詳解

    java的新特性反射機制應(yīng)用及操作示例詳解

    這篇文章主要為大家介紹了java的新特性反射機制的操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Hibernate延遲加載技術(shù)詳解

    Hibernate延遲加載技術(shù)詳解

    這篇文章主要介紹了Hibernate延遲加載技術(shù),結(jié)合實例形式詳細分析了Hibernate延遲加載所涉及的各種常用技巧,需要的朋友可以參考下
    2016-03-03
  • log4j2動態(tài)修改日志級別及拓展性使用詳解

    log4j2動態(tài)修改日志級別及拓展性使用詳解

    這篇文章主要介紹了log4j2動態(tài)修改日志級別及拓展性使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Java JDK動態(tài)代理的基本原理詳細介紹

    Java JDK動態(tài)代理的基本原理詳細介紹

    這篇文章主要介紹了Java JDK動態(tài)代理的基本原理詳細介紹的相關(guān)資料,這里對動態(tài)代理進行了詳解并附簡單實例代碼,需要的朋友可以參考下
    2017-01-01
  • Java Spring @Lazy延遲注入源碼案例詳解

    Java Spring @Lazy延遲注入源碼案例詳解

    這篇文章主要介紹了Java Spring @Lazy延遲注入源碼案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • JVM自定義類加載器在代碼擴展性實踐分享

    JVM自定義類加載器在代碼擴展性實踐分享

    這篇文章主要介紹了JVM自定義類加載器在代碼擴展性實踐分享,一個類型從被加載到虛擬機內(nèi)存中開始,到卸載出內(nèi)存為止,它的整個生命周期將會經(jīng)歷加載、驗證、準(zhǔn)備、解析、初始化 、使用和卸載七個階段,其中驗證、準(zhǔn)備、解析三個部分統(tǒng)稱為連接
    2022-06-06
  • RabbitMQ消費者限流實現(xiàn)消息處理優(yōu)化

    RabbitMQ消費者限流實現(xiàn)消息處理優(yōu)化

    這篇文章主要介紹了RabbitMQ消費者限流實現(xiàn)消息處理優(yōu)化,消費者限流是用于消費者每次獲取消息時限制條數(shù),注意前提是手動確認模式,并且在手動確認后才能獲取到消息,感興趣想要詳細了解可以參考下文
    2023-05-05
  • 2020年編程選Java的8大理由,JAVA前景如何

    2020年編程選Java的8大理由,JAVA前景如何

    這篇文章主要介紹了2020年編程選Java的8大理由,JAVA前景如何,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07

最新評論

遂川县| 资源县| 八宿县| 格尔木市| 雷波县| 汉沽区| 都昌县| 鱼台县| 正镶白旗| 扎鲁特旗| 福建省| 河北区| 陇西县| 朝阳市| 荃湾区| 铁岭市| 兴业县| 宁城县| 中江县| 高唐县| 英山县| 太谷县| 永靖县| 资溪县| 霸州市| 电白县| 深水埗区| 本溪市| 富阳市| 淄博市| 漠河县| 浮山县| 宜丰县| 永新县| 淮南市| 开远市| 当雄县| 萨嘎县| 辽宁省| 太保市| 那曲县|