欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

一、核心概念:父 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)簽指定父模塊的groupId、artifactId、version(這三者唯一標(biāo)識父模塊),示例:

<parent>
  <!-- 父模塊的坐標(biāo) -->
  <groupId>com.example</groupId>
  <artifactId>parent-project</artifactId>
  <version>1.0.0</version>
  <!-- 父POM的相對路徑(默認(rèn)../pom.xml,可省略) -->
  <relativePath>../pom.xml</relativePath>
</parent>
  • relativePath:指定父 POM 的位置(默認(rèn)查找父目錄的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 的默認(rèn)配置。

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

相關(guān)文章

  • java導(dǎo)出Excel(非模板)可導(dǎo)出多個sheet方式

    java導(dǎo)出Excel(非模板)可導(dǎo)出多個sheet方式

    Java開發(fā)中,導(dǎo)出Excel是常見需求,有時需要支持多個Sheet導(dǎo)出,此技巧介紹非模板方式實現(xiàn)單標(biāo)題單Sheet以及多Sheet導(dǎo)出,標(biāo)題一致或不一致均可,可換成Map使用,適合個人開發(fā)者和需要Excel導(dǎo)出功能的場景
    2024-09-09
  • Java中BigDecimal類的簡單用法

    Java中BigDecimal類的簡單用法

    這篇文章主要介紹了Java中BigDecimal類的簡單用法,是Java應(yīng)用程序開發(fā)中非常實用的技巧,本文以實例形式對此進(jìn)行了簡單的分析,需要的朋友可以參考下
    2014-09-09
  • 關(guān)于SHA算法原理與常用實現(xiàn)方式

    關(guān)于SHA算法原理與常用實現(xiàn)方式

    這篇文章主要介紹了關(guān)于SHA算法原理與常用實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Java中的Future獲取任務(wù)返回值詳解

    Java中的Future獲取任務(wù)返回值詳解

    這篇文章主要介紹了Java中的Future獲取任務(wù)返回值詳解,在向線程池ThreadPoolExecutor提交任務(wù)時,一般為了方便操作采用execute提交任務(wù),這時線程其實是無返回值的,需要的朋友可以參考下
    2023-12-12
  • Mabatis錯誤提示Parameter index out of range的處理方法

    Mabatis錯誤提示Parameter index out of range的處理方法

    這篇文章主要介紹了Mabatis錯誤提示Parameter index out of range 的處理方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • springmvc接收json串,轉(zhuǎn)換為實體類List方法

    springmvc接收json串,轉(zhuǎn)換為實體類List方法

    今天小編就為大家分享一篇springmvc接收json串,轉(zhuǎn)換為實體類List方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Mybatis攔截器實現(xiàn)公共字段填充的示例代碼

    Mybatis攔截器實現(xiàn)公共字段填充的示例代碼

    本文介紹了使用Spring Boot和MyBatis實現(xiàn)公共字段的自動填充功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Token安全存儲的幾種方式小結(jié)

    Token安全存儲的幾種方式小結(jié)

    在現(xiàn)代 Web 應(yīng)用中,身份認(rèn)證與授權(quán)是確保系統(tǒng)安全性的重要部分,Token被廣泛應(yīng)用,作為實現(xiàn)身份認(rèn)證的主要方式,然而,如何安全地存儲這些 Token,是每個開發(fā)者在構(gòu)建前端應(yīng)用時必須考慮的問題,本文將深入探討Token安全存儲的幾種方式,需要的朋友可以參考下
    2025-04-04
  • Java實現(xiàn)上傳和下載功能(支持多個文件同時上傳)

    Java實現(xiàn)上傳和下載功能(支持多個文件同時上傳)

    這篇文章主要介紹了Java實現(xiàn)上傳和下載功能,支持多個文件同時上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • java Thumbnails 圖片處理的使用

    java Thumbnails 圖片處理的使用

    這篇文章主要介紹了java Thumbnails 圖片處理的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評論