目錄標題
- 1、根標簽 `<project>` 的直接子標簽順序?
- 2、常見子標簽內部順序?
- 2.1、`<build>` 標簽內部順序
- 2.2、`<dependencies>` 標簽內部順序
- 3、modelVersion 為什么是 4.0.0 ?
- 4、`<parent>` 標簽???
- 4.1、為什么需要 `<parent>` 標簽???
- 4.2、實踐:
- 4.3、`relativePath` 標簽
- 4.3.1、默認行為
- 4.3.2、設置 ``
- 5、`packaging` 標簽
- 5.1、作用
- 5.2、詳細說明
- 5.2.1、jar【默認值】
- 5.2.2、war
- 5.2.3、pom
- 5.2.4、自定義打包
- 5.2.4.1、Spring Boot 可執行 JAR?
- 5.2.4.2、生成 ZIP 包?
- 6、dependencyManagement 標簽 & dependencies 標簽
- 6.1、dependencyManagement 標簽
- 6.2、dependencies 標簽
- 6.3、區別
- 6.4、使用場景
- 6.4.1、場景 1:多模塊項目?
- 6.4.2、場景 2:單模塊項目
- 6.4.3、場景 3:BOM(Bill of Materials)導入?
- 6.5、父模塊使用場景
- 7、build 標簽
- 7.1、子模塊打包成可依賴
- 7.1.1、子模塊只提供可依賴 JAR?
- 7.1.2、子模塊同時提供可執行 JAR 和可依賴 JAR?
- 8、profiles 標簽
- 9、resources 標簽
- 9.1、resources 標簽作用
- 9.2、示例
- 9.2.1、資源過濾與包含規則
- 9.3、改進
- 10、pom.xml 示例
1、根標簽 <project>
的直接子標簽順序?
pom 標簽格式:Maven POM XSD Schema
<project><!-- 必填標簽 --><modelVersion>4.0.0</modelVersion> <!-- 必須為 4.0.0 --><parent></parent> <!-- 可選 --><groupId>com.example</groupId> <!-- 項目組標識 --><artifactId>my-project</artifactId> <!-- 項目唯一標識 --><version>1.0.0</version> <!-- 版本號 --><packaging>jar</packaging> <!-- 打包類型,默認為 jar --><!-- 可選標簽 --><name>My Project</name> <!-- 項目顯示名稱 --><description>...</description> <!-- 項目描述 --><url>http://example.com</url> <!-- 項目主頁 --><inceptionYear>2023</inceptionYear> <!-- 項目創建年份 --><organization>...</organization> <!-- 組織信息 --><licenses>...</licenses> <!-- 許可證 --><developers>...</developers> <!-- 開發者列表 --><contributors>...</contributors> <!-- 貢獻者列表 --><mailingLists>...</mailingLists> <!-- 郵件列表 --><prerequisites>...</prerequisites> <!-- Maven 版本要求 --><modules>...</modules> <!-- 多模塊項目子模塊 --><scm>...</scm> <!-- 版本控制信息 --><issueManagement>...</issueManagement> <!-- 問題跟蹤系統 --><ciManagement>...</ciManagement> <!-- 持續集成配置 --><distributionManagement>...</distributionManagement> <!-- 部署配置 --><properties>...</properties> <!-- 自定義屬性 --><dependencyManagement>...</dependencyManagement> <!-- 依賴管理 --><dependencies>...</dependencies> <!-- 項目依賴 --><repositories>...</repositories> <!-- 遠程倉庫 --><pluginRepositories>...</pluginRepositories> <!-- 插件倉庫 --><build>...</build> <!-- 構建配置 --><reporting>...</reporting> <!-- 報告插件配置 --><profiles>...</profiles> <!-- 多環境配置 -->
</project>
2、常見子標簽內部順序?
2.1、<build>
標簽內部順序
<build><sourceDirectory>...</sourceDirectory><scriptSourceDirectory>...</scriptSourceDirectory><testSourceDirectory>...</testSourceDirectory><outputDirectory>...</outputDirectory><testOutputDirectory>...</testOutputDirectory><extensions>...</extensions><defaultGoal>...</defaultGoal><resources>...</resources><testResources>...</testResources><directory>...</directory><finalName>...</finalName><filters>...</filters><pluginManagement>...</pluginManagement><plugins>...</plugins>
</build>
2.2、<dependencies>
標簽內部順序
每個 的標簽順序:
<dependency><groupId>...</groupId><artifactId>...</artifactId><version>...</version><type>...</type><classifier>...</classifier><scope>...</scope><systemPath>...</systemPath><exclusions>...</exclusions><optional>...</optional>
</dependency>
3、modelVersion 為什么是 4.0.0 ?
Maven 項目對象模型(POM)使用 XML 文件來描述項目配置。modelVersion 元素指定了 POM 模型使用的版本。Maven 2 和 3 都使用 4.0.0 作為 modelVersion,因為 POM 模型的結構在 Maven 2 發布時已經穩定,之后沒有重大變更,所以版本號保持不變
Maven 官方文檔中提到,從 Maven 2.0 開始,modelVersion一直是 4.0.0。即使 Maven 升級到 3.x,POM 模型的結構沒有大的改變,所以不需要更新 modelVersion。這可能是因為向后兼容性考慮,或者模型本身已經足夠成熟,不需要修改
歷史背景:
- Maven 1.x?? 使用的 POM 模型版本是 3.0.0,但該版本已廢棄\
- Maven 2.x?? 在 2006 年發布時,引入了全新的 POM 模型版本 4.0.0(簡化了依賴管理、插件機制等),并沿用至今
- Maven 3.x 完全兼容 4.0.0 模型,僅優化了內部實現(如性能、錯誤處理),未改動 POM 結構
4、<parent>
標簽???
4.1、為什么需要 <parent>
標簽???
<parent>
標簽??可選但常見??的配置【重要】
- ??繼承統一配置??:父 POM 可以定義子模塊共用的依賴、插件、屬性、倉庫等信息,避免重復配置。
- ??依賴管理??:通過
<dependencyManagement>
統一管理依賴版本。 - ??插件管理??:通過
<pluginManagement>
統一管理插件版本和配置。 - ??多模塊項目??:在聚合項目(
<modules>
)中,父 POM 通常用于組織子模塊。
4.2、實踐:
- 顯式聲明父 POM 的
<relativePath>
:若父 POM 未發布到倉庫,需通過相對路徑定位 - 避免過度繼承??:僅繼承必要的配置,保持 POM 簡潔
- 優先使用 BOM(Bill of Materials): 對于依賴版本管理,可結合
<dependencyManagement>
導入 BOM,而非強制繼承父 POM
<parent><groupId> org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.6</version><!-- 可選:若父 POM 不在本地倉庫或遠程倉庫中,需指定相對路徑 --><relativePath>../parent/pom.xml</relativePath>
</parent><!-- 子模塊的坐標(如果父 POM 已定義,此處可省略 groupId/version) -->
<artifactId>child-module</artifactId>
4.3、relativePath
標簽
<relativePath>
標簽用于指定父項目 POM 文件的相對路徑
4.3.1、默認行為
Maven在構建時,默認會??先檢查本地路徑??(如 ../pom.xml
)嘗試從本地文件系統找到父項目的 POM 文件。如果找不到,??才會從遠程倉庫(Repository)下載。
Maven會依次嘗試:
- 本地路徑:…/pom.xml(即上一級目錄)
- 本地倉庫(~/.m2/repository)
- 遠程倉庫
4.3.2、設置 <relativePath/>
當顯式配置 <relativePath/>
為空標簽時,表示??跳過本地路徑查找??,直接強制從配置的倉庫(如Maven Central、私有 Nexus 等)下載父項目的 POM 文件
Maven會跳過本地路徑查找,直接:
- 本地倉庫
- 遠程倉庫
<relativePath/>
的作用是??強制 Maven 從倉庫解析父項目??,而非本地文件系統,適用于父項目獨立管理的場景
5、packaging
標簽
<packaging>
標簽用于定義項目的??輸出類型??(即構建產物的格式)
5.1、作用
- 定義構建產物類型??:決定 Maven 構建后生成的最終文件格式(如 JAR、WAR、POM 等)。
- ??控制構建生命周期??:不同打包類型會觸發不同的默認生命周期階段和插件配置。
- ??默認值??:如果未顯式聲明
<packaging>
,默認值為 jar
常見打包類型:
打包類型 | 描述 | 典型應用場景 | 輸出文件示例 |
---|---|---|---|
??jar? | Java 庫或可執行 JAR | 普通 Java 項目、工具類庫 | myapp-1.0.0.jar |
??war | Web 應用歸檔文件 | Servlet/JSP Web 應用 | mywebapp-1.0.0.war |
????pom? | 聚合或父項目 | 多模塊項目的父 POM 或聚合項目 | 無實際構建產物 |
maven-plugin | Maven 插件 | 自定義 Maven 插件開發 | myplugin-1.0.0.jar |
5.2、詳細說明
5.2.1、jar【默認值】
- 用途:普通 Java 項目或庫
- 生命周期??:使用 default 生命周期(compile → test → package → install)
- 場景:生成可執行 JAR(需配置
maven-jar-plugin
):
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifest><mainClass>com.example.Main</mainClass></manifest></archive></configuration></plugin></plugins>
</build>
5.2.2、war
- 用途:Web 應用程序(Servlet/JSP)
- 生命周期??:使用 war 生命周期(自動綁定 war:war 目標)
- 依賴處理:依賴 JAR 文件會被打包到
WEB-INF/lib
目錄 - 場景:
maven-war-plugin
(默認已綁定)
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.3.2</version><configuration><warSourceDirectory>src/main/webapp</warSourceDirectory></configuration></plugin></plugins>
</build>
5.2.3、pom
- 用途:
- 多模塊項目的??父 POM??(繼承配置)
- 聚合項目(通過
<modules>
管理子模塊)
- 生命周期??:執行構建,僅傳遞配置
- 場景
<packaging>pom</packaging>
<modules><module>module1</module><module>module2</module>
</modules>
5.2.4、自定義打包
通過插件支持擴展其他打包格式(如 zip、tar.gz 等),例如:
5.2.4.1、Spring Boot 可執行 JAR?
<packaging>jar</packaging>
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>
5.2.4.2、生成 ZIP 包?
使用 maven-assembly-plugin
:
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.3.0</version><configuration><descriptor>src/main/assembly/zip.xml</descriptor></configuration><executions><execution><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins>
</build>
6、dependencyManagement 標簽 & dependencies 標簽
6.1、dependencyManagement 標簽
dependencyManagement
用于??集中管理依賴的版本和配置??,但??不實際引入依賴??到當前項目。它通常出現在??父 POM?? 中,目的是為子模塊提供統一的依賴版本控制,避免重復定義
作用:
- 版本統一管理?:在父 POM 中定義依賴的版本號、作用域(scope)、排除項(exclusions)等配置,子模塊只需聲明 groupId 和 artifactId,無需重復指定版本
- 依賴配置模板??:子模塊可以繼承父 POM 中的依賴配置,但??是否實際使用該依賴由子模塊自行決定??
- 多模塊項目標準化??:確保所有子模塊使用相同版本的依賴,避免版本沖突
示例:
<!-- 父 POM 中定義 -->
<dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.8</version> <!-- 統一版本 --><scope>compile</scope></dependency></dependencies>
</dependencyManagement>
子模塊中只需聲明:
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId> <!-- 無需寫版本 --></dependency>
</dependencies>
6.2、dependencies 標簽
dependencies 用于??直接聲明項目所需的依賴??,這些依賴會被??實際引入到項目中??。如果依賴未在 dependencyManagement 中定義,必須顯式指定版本號
作用:
- 實際引入依賴 :??所有在 dependencies 中聲明的依賴會默認被項目使用(除非指定了特殊作用域,如 test)。
- ??顯式依賴聲明?? :每個依賴需要明確指定 groupId、artifactId 和 version(除非通過
dependencyManagement
繼承/父 POM 繼承)
6.3、區別
??特性? | dependencyManagement | dependencies |
---|---|---|
??是否引入依賴? | 否(僅管理配置) | 是(實際引入依賴) |
??版本必須性? | 父 POM 中必須指定版本,子模塊可省略 | 必須顯式指定版本(除非繼承自父 POM) |
適用場景? | 多模塊項目的父 POM,統一管理依賴 | 單模塊項目或子模塊的實際依賴聲明 |
依賴作用域控制? | 可定義作用域,子模塊可繼承或覆蓋 | 直接指定作用域 |
??依賴傳遞性? | 無實際依賴傳遞 | 依賴會傳遞到子模塊 |
6.4、使用場景
6.4.1、場景 1:多模塊項目?
- 父 POM:使用
dependencyManagement
統一管理所有子模塊的依賴版本 - ??子模塊:在
dependencies
中聲明實際需要的依賴,無需寫版本號
6.4.2、場景 2:單模塊項目
- 直接使用
dependencies
聲明依賴并指定版本
6.4.3、場景 3:BOM(Bill of Materials)導入?
通過 dependencyManagement
的 import
作用域,從其他 POM 導入依賴管理配置:
<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.5.4</version><!--表示引入的是一個 POM 文件(而非默認的 JAR 包),因為 BOM 本身是一個依賴管理文件--><type>pom</type><!--將 spring-boot-dependencies 中定義的 <dependencyManagement> 內容??合并到當前項目的依賴管理配置中--><scope>import</scope></dependency></dependencies>
</dependencyManagement>
核心作用是:導入 Spring Boot 的 BOM(Bill of Materials),統一管理所有 Spring Boot 相關依賴的版本
無需手動指定版本:項目中聲明 Spring Boot 依賴時,只需提供 groupId 和 artifactId,例如:
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 版本號由 BOM 自動提供 --></dependency>
</dependencies>
6.5、父模塊使用場景
父模塊的主要職責是??統一管理子模塊的配置??(如依賴版本、插件版本等),而不是實際參與代碼構建。因此,大多數情況下:
- ??優先使用
dependencyManagement??
:在父模塊中定義依賴的版本、作用域、排除規則等,子模塊只需聲明groupId
和artifactId
,無需重復指定版本。這是 Maven 多模塊項目的核心設計。 - 避免濫用
dependencies
:如果父模塊的dependencies
中聲明了依賴,這些依賴會??隱式傳遞給所有子模塊??(除非子模塊主動排除),可能導致子模塊引入不需要的依賴,增加依賴冗余和沖突風險。
父模塊使用 dependencies
的合理場景:
- 父模塊本身是一個可執行模塊?
- ?所有子模塊都需要的公共依賴??【需確保依賴的傳遞性合理,避免污染子模塊】
- 父模塊需要插件依賴?:如果父模塊需要為子模塊統一配置插件,直接在父模塊的
<build>
中聲明插件依賴即可,無需使用dependencies
7、build 標簽
<!--構建配置-->
<build><plugins><!--編譯源代碼--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><!--指定源代碼兼容的 JDK 版本--><source>${java.version}</source><!--指定生成的字節碼目標 JDK 版本--><target>${java.version}</target><!--設置編譯時的字符編碼--><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin><!--生成 SpringBoot 可執行的 jar--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.zzc.ParentApplication</mainClass><!--跳過當前插件所有操作【父工程無需打包】--><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins>
</build>
配置了 2 個插件:
- 編譯代碼:
maven-compiler-plugin
根據 JDK 1.8 和 UTF-8 編碼編譯源碼 - 代碼應用:
spring-boot-maven-plugin
在package
階段生成可執行JAR
- 跳過條件:若
<skip>true</skip>
,則跳過生成可執行JAR
的步驟
7.1、子模塊打包成可依賴
7.1.1、子模塊只提供可依賴 JAR?
①:確保子模塊的 packaging 類型為 jar
<!-- 子模塊 pom.xml -->
<artifactId>child-module</artifactId>
<packaging>jar</packaging> <!-- 默認即為 jar,無需顯式聲明 -->
②:禁用 Spring Boot 插件(若存在)?
如果父模塊或子模塊中引入了 spring-boot-maven-plugin,需在子模塊中??跳過該插件??:
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!-- 跳過可執行 JAR 的生成 --><skip>true</skip></configuration></plugin></plugins>
</build>
③:驗證生成的 JAR?
執行 mvn clean install 后,檢查子模塊的 target 目錄:
- 生成文件應為標準 JAR(如 child-module-1.0.0.jar),內容僅包含子模塊自身的代碼和資源
- 無嵌入依賴??(Fat JAR 特征為包含 BOOT-INF 目錄)
7.1.2、子模塊同時提供可執行 JAR 和可依賴 JAR?
適用于子模塊既需要獨立運行,又要作為依賴被其他模塊引用
①:配置 Spring Boot 插件生成分類器 JAR?
在子模塊中保留 spring-boot-maven-plugin,但通過 <classifier>
生成??兩個 JAR??:
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!-- 可執行 JAR 添加分類器(如 "exec") --><classifier>exec</classifier></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins>
</build>
②:驗證生成的兩個 JAR?
執行 mvn clean install
后,檢查 target 目錄:
- ??標準依賴 JAR??:
child-module-1.0.0.jar
(無嵌入依賴)。 - ??可執行 JAR??:
child-module-1.0.0-exec.jar
(含所有依賴)
8、profiles 標簽
<!--多環境配置-->
<profiles><profile><id>dev</id><activation><!-- 默認激活 --><activeByDefault>true</activeByDefault></activation><properties><env>dev</env></properties></profile><profile><id>prod</id><properties><env>prod</env></properties><build><resources><!-- 啟用資源過濾 --><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>application-${env}.yml</include><!-- 所有yml配置文件--><!--<include>**/*.yml</include>--></includes></resource></resources></build></profile>
</profiles>
定義了 ??兩個 Profile??:dev(開發環境)和 prod(生產環境),通過 <env>
屬性動態控制資源文件的加載和過濾
9、resources 標簽
9.1、resources 標簽作用
build
標簽里面通常包含構建項目時需要的一些配置,比如插件、資源目錄等。而 resources
標簽和資源文件有關。
資源文件通常指的是項目中的非代碼文件:配置文件、屬性文件、XML文件、圖片等等。這些文件在構建過程中可能需要被處理或包含到最終的包中【jar/war 包】
默認情況下【不添加 resources 標簽】:Maven 會把 src/main/resources
目錄下的文件復制到target/classes
目錄中,然后在打包時包含進去。同樣,src/test/resources
用于測試資源,會復制到 target/test-classes
【如果用戶顯式地添加了 resource
標簽,Maven 會覆蓋默認行為,只處理顯式定義的資源】
默認已經處理了資源文件,為什么還需要配置resources標簽?
因為當項目有特殊的資源處理需求時:
- 資源文件不在默認目錄下:資源文件不在
src/main/resources
,而是在另一個目錄src/config
,這時候就需要在resources
里指定這個目錄,讓 Maven 知道需要處理這些文件 - 需要過濾(替換變量):在資源文件中使用 Maven 的屬性(如
${project.version}
),就需要啟用過濾,這樣在構建時這些占位符會被替換成實際的值 - 需要包含/排除某些文件:不希望某些配置文件被打包進去,這時候可以用
excludes
標簽
總結:資源文件(如配置文件、屬性文件、XML、圖片等)默認位于
src/main/resources
目錄中,Maven 在構建時會自動將其復制到target/classes
目錄,并打包到最終的JAR/WAR
文件中。<resources>
標簽允許你:
- ??自定義資源目錄??:指定其他位置的資源文件
- 過濾(Filtering):替換資源文件中的 Maven 屬性占位符(如
${project.version}
)- 包含/排除文件??:精確控制哪些文件需要處理或忽略
9.2、示例
<build><resources><resource><directory>src/main/resources</directory> <!-- 指定資源目錄 --><filtering>true</filtering> <!-- 啟用變量替換 --><includes> <!-- 指定包含的文件類型 --><include>**/*.xml</include><include>**/*.yml</include></includes></resource></resources>
</build>
作用:
- 資源過濾(Variable Filtering):啟用
<filtering>true</filtering>
后,Maven 會解析資源文件中的占位符(如${project.version}
、${custom.property}
),并將其替換為實際值 - ??選擇性包含文件:通過
<includes>
指定僅處理 XML 和 YML 文件,其它類型文件(如.properties
、.txt
)會被忽略
9.2.1、資源過濾與包含規則
假設 application-dev.yml
中有以下內容:
database:url: ${db.url}username: ${db.user}password: ${db.password}
在構建時,Maven 會替換 ${db.url}
等占位符。需要在 pom.xml
或 settings.xml
中定義這些屬性:
<properties><db.url>jdbc:mysql://prod-server:3306/mydb</db.url><db.user>admin</db.user><db.password>securepass</db.password>
</properties>
9.3、改進
- 風險:若資源目錄中包含其他需復制的文件(如
.properties
或靜態文件),因未被<includes>
覆蓋,將不會被打包 - 改進:顯式包含所有文件,但僅對需要過濾的文件啟用過濾
<resources><!-- 包含所有文件但不啟用過濾 --><resource><directory>src/main/resources</directory><filtering>false</filtering><includes><include>**/*</include></includes></resource><!-- 對特定文件啟用過濾 --><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>**/*.xml</include><include>**/*.yml</include><!--特定文件--><!--<include>application-${env}.yml</include>--></includes></resource>
</resources>
????????第一個
resource
標簽的作用是包含src/main/resources
目錄下的所有文件,但不過濾(filtering 為false)。這意味著這些文件會被復制到target/classes
目錄中,但不進行任何變量替換。第二個resource
標簽則專門針對application-${env}.yml
文件,啟用了過濾,這樣在構建時,Maven 會替換這些文件中的變量。
????????默認情況下【不添加 resources 標簽】:Maven 會處理src/main/resources
目錄下的所有資源文件,使用默認的過濾設置(通常是關閉的)。但是如果用戶顯式地添加了resource
標簽,Maven 會覆蓋默認行為,只處理顯式定義的資源。
????????當前配置中的第一個resource
標簽顯式地包括了所有文件,但關閉了過濾。而第二個resource
標簽針對特定文件啟用了過濾。如果刪除第一個resource
標簽,Maven 將不再處理所有文件,而是只處理第二個resource
標簽中定義的文件,即所有 xml 和 所有的 yml
。這將導致其他資源文件(如靜態文件、其他配置文件)沒有被包含到構建結果中,從而可能導致應用程序運行時缺少必要的資源。
10、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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><!--必須是4.0.0--><modelVersion>4.0.0</modelVersion><!--繼承父 POM 的配置--><parent><groupId> org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.6</version><relativePath/></parent><groupId>com.zzc</groupId><artifactId>parent</artifactId><version>${project.version}</version><!--打包方式, 默認為 jar--><packaging>pom</packaging><!--項目名稱&描述--><name>parent</name><description>parent</description><!--子模塊--><modules><!--<module>entity</module>--></modules><!--自定義屬性配置--><properties><java.version>1.8</java.version><project.version>0.0.1-SNAPSHOT</project.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.7.6</spring-boot.version><mybatis.plus.boot.starter.version>3.4.3</mybatis.plus.boot.starter.version><hutool.version>5.7.0</hutool.version><fastjson.version>1.2.76</fastjson.version><lombok.version>1.18.28</lombok.version></properties><!--依賴管理--><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis.plus.boot.starter.version}</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>${hutool.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><scope>provided</scope></dependency></dependencies></dependencyManagement><!--項目依賴--><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><!--構建配置--><build><plugins><!--編譯源代碼--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><!--指定源代碼兼容的 JDK 版本--><source>${java.version}</source><!--指定生成的字節碼目標 JDK 版本--><target>${java.version}</target><!--設置編譯時的字符編碼--><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin><!--生成 SpringBoot 可執行的 jar--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.zzc.ParentApplication</mainClass><!--跳過當前插件所有操作【父工程無需打包】--><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build><!--多環境配置--><profiles><profile><id>dev</id><activation><!-- 默認激活 --><activeByDefault>true</activeByDefault></activation><properties><env>dev</env></properties></profile><profile><id>prod</id><properties><env>prod</env></properties><build><resources><!-- 啟用資源過濾 --><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>application-${env}.yml</include><!-- 所有yml配置文件--><!--<include>**/*.yml</include>--></includes></resource></resources></build></profile></profiles></project>