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

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

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

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

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

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

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

二、父 POM 的特點(diǎn)與配置

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

1. 打包類型必須為pom

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

<packaging>pom</packaging> 

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

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

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

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

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

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

三、子 POM 的特點(diǎn)與配置

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

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

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

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

2. 子模塊的特有配置

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

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

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

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

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

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

五、完整示例

假設(shè)項(xiàng)目結(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>
 
    <!-- 公共屬性(版本號(hào)等) -->
    <properties>
        <java.version>11</java.version>
        <spring-boot.version>2.7.0</spring-boot.version>
    </properties>
 
    <!-- 依賴版本管理(子模塊引用時(shí)無(wú)需寫(xiě)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,只需寫(xiě)artifactId) -->
    <artifactId>user-service</artifactId>
    <name>User Service</name>
 
    <!-- 引用父模塊管理的依賴(無(wú)需版本) -->
    <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中的插件(無(wú)需版本) -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

六、總結(jié)

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

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

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

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

相關(guān)文章

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

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

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

    Java中BigDecimal類的簡(jiǎn)單用法

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

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

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

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

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

    Mabatis錯(cuò)誤提示Parameter index out of range的處理方法

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

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

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

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

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

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

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

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

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

    java Thumbnails 圖片處理的使用

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

最新評(píng)論