Maven 中的 pom.xml 文件

目錄標題

  • 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。這可能是因為向后兼容性考慮,或者模型本身已經足夠成熟,不需要修改

歷史背景:

  1. Maven 1.x?? 使用的 POM 模型版本是 3.0.0,但該版本已廢棄\
  2. Maven 2.x?? 在 2006 年發布時,引入了全新的 POM 模型版本 4.0.0(簡化了依賴管理、插件機制等),并沿用至今
  3. Maven 3.x 完全兼容 4.0.0 模型,僅優化了內部實現(如性能、錯誤處理),未改動 POM 結構

4、<parent> 標簽???

4.1、為什么需要 <parent> 標簽???

<parent> 標簽??可選但常見??的配置【重要】

  • ??繼承統一配置??:父 POM 可以定義子模塊共用的依賴、插件、屬性、倉庫等信息,避免重復配置。
  • ??依賴管理??:通過 <dependencyManagement> 統一管理依賴版本。
  • ??插件管理??:通過 <pluginManagement> 統一管理插件版本和配置。
  • ??多模塊項目??:在聚合項目(<modules>)中,父 POM 通常用于組織子模塊。

4.2、實踐:

  1. 顯式聲明父 POM 的 <relativePath>:若父 POM 未發布到倉庫,需通過相對路徑定位
  2. 避免過度繼承??:僅繼承必要的配置,保持 POM 簡潔
  3. 優先使用 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會依次嘗試:

  1. 本地路徑:…/pom.xml(即上一級目錄)
  2. 本地倉庫(~/.m2/repository)
  3. 遠程倉庫

4.3.2、設置 <relativePath/>

當顯式配置 <relativePath/> 為空標簽時,表示??跳過本地路徑查找??,直接強制從配置的倉庫(如Maven Central、私有 Nexus 等)下載父項目的 POM 文件

Maven會跳過本地路徑查找,直接:

  1. 本地倉庫
  2. 遠程倉庫

<relativePath/> 的作用是??強制 Maven 從倉庫解析父項目??,而非本地文件系統,適用于父項目獨立管理的場景

5、packaging 標簽

<packaging> 標簽用于定義項目的??輸出類型??(即構建產物的格式)

5.1、作用

  • 定義構建產物類型??:決定 Maven 構建后生成的最終文件格式(如 JAR、WAR、POM 等)。
  • ??控制構建生命周期??:不同打包類型會觸發不同的默認生命周期階段和插件配置。
  • ??默認值??:如果未顯式聲明 <packaging>,默認值為 jar

常見打包類型:

打包類型描述典型應用場景輸出文件示例
??jar?Java 庫或可執行 JAR普通 Java 項目、工具類庫myapp-1.0.0.jar
??warWeb 應用歸檔文件Servlet/JSP Web 應用mywebapp-1.0.0.war
????pom?聚合或父項目多模塊項目的父 POM 或聚合項目無實際構建產物
maven-pluginMaven 插件自定義 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?? 中,目的是為子模塊提供統一的依賴版本控制,避免重復定義

作用:

  1. 版本統一管理?:在父 POM 中定義依賴的版本號、作用域(scope)、排除項(exclusions)等配置,子模塊只需聲明 groupId 和 artifactId,無需重復指定版本
  2. 依賴配置模板??:子模塊可以繼承父 POM 中的依賴配置,但??是否實際使用該依賴由子模塊自行決定??
  3. 多模塊項目標準化??:確保所有子模塊使用相同版本的依賴,避免版本沖突

示例:

<!-- 父 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 中定義,必須顯式指定版本號

作用:

  1. 實際引入依賴 :??所有在 dependencies 中聲明的依賴會默認被項目使用(除非指定了特殊作用域,如 test)。
  2. ??顯式依賴聲明?? :每個依賴需要明確指定 groupId、artifactId 和 version(除非通過 dependencyManagement 繼承/父 POM 繼承)

6.3、區別

??特性?dependencyManagementdependencies
??是否引入依賴?否(僅管理配置)是(實際引入依賴)
??版本必須性?父 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)導入?

通過 dependencyManagementimport 作用域,從其他 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、父模塊使用場景

父模塊的主要職責是??統一管理子模塊的配置??(如依賴版本、插件版本等),而不是實際參與代碼構建。因此,大多數情況下:

  1. ??優先使用 dependencyManagement?? :在父模塊中定義依賴的版本、作用域、排除規則等,子模塊只需聲明 groupIdartifactId,無需重復指定版本。這是 Maven 多模塊項目的核心設計。
  2. 避免濫用 dependencies:如果父模塊的 dependencies 中聲明了依賴,這些依賴會??隱式傳遞給所有子模塊??(除非子模塊主動排除),可能導致子模塊引入不需要的依賴,增加依賴冗余和沖突風險。

父模塊使用 dependencies 的合理場景:

  1. 父模塊本身是一個可執行模塊?
  2. ?所有子模塊都需要的公共依賴??【需確保依賴的傳遞性合理,避免污染子模塊】
  3. 父模塊需要插件依賴?:如果父模塊需要為子模塊統一配置插件,直接在父模塊的 <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 個插件:

  1. 編譯代碼:maven-compiler-plugin 根據 JDK 1.8 和 UTF-8 編碼編譯源碼
  2. 代碼應用:spring-boot-maven-pluginpackage 階段生成可執行 JAR
  3. 跳過條件:若 <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 目錄:

  1. 生成文件應為標準 JAR(如 child-module-1.0.0.jar),內容僅包含子模塊自身的代碼和資源
  2. 無嵌入依賴??(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 目錄:

  1. ??標準依賴 JAR??:child-module-1.0.0.jar(無嵌入依賴)。
  2. ??可執行 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標簽?

因為當項目有特殊的資源處理需求時:

  1. 資源文件不在默認目錄下:資源文件不在 src/main/resources,而是在另一個目錄 src/config,這時候就需要在 resources 里指定這個目錄,讓 Maven 知道需要處理這些文件
  2. 需要過濾(替換變量):在資源文件中使用 Maven 的屬性(如 ${project.version}),就需要啟用過濾,這樣在構建時這些占位符會被替換成實際的值
  3. 需要包含/排除某些文件:不希望某些配置文件被打包進去,這時候可以用 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>

作用:

  1. 資源過濾(Variable Filtering):啟用 <filtering>true</filtering> 后,Maven 會解析資源文件中的占位符(如 ${project.version}${custom.property}),并將其替換為實際值
  2. ??選擇性包含文件:通過 <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.xmlsettings.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>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79395.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79395.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79395.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

方案精讀:華為與中軟-智慧園區解決方案技術主打膠片【附全文閱讀】

該文檔是華為與中軟國際的智慧園區輕量化解決方案推介&#xff0c;主要面向園區管理者、運營者及相關企業決策人。其核心圍繞園區痛點&#xff0c;闡述智慧園區的發展趨勢。 方案涵蓋綜合安防、便捷通行、設備管理等多領域應用場景&#xff0c;通過智能視頻監控、人臉識別、遠程…

# KVstorageBaseRaft-cpp 項目 RPC 模塊源碼學習

KVstorageBaseRaft-cpp 項目 RPC 模塊源碼學習 。 一、項目簡介 KVstorageBaseRaft-cpp 是一個基于 Raft 一致性算法實現的分布式 KV 存儲系統&#xff0c;采用 C 開發。項目的核心目標是幫助開發者理解 Raft 原理和分布式 KV 存儲的基本實現。RPC 模塊是分布式系統通信的關…

TeledyneLeCroy在OFC2025 EA展臺上展示了其400G/800G的全包圍的測試解決方案,滿足了UEC聯盟和UALINK聯盟的技術需求

Teledyne LeCroy在OFC 2025上的EA展臺 在2025年3月26日至28日于美國圣地亞哥舉辦的OFC&#xff08;Optical Fiber Communication Conference and Exhibition&#xff09;展會上&#xff0c;全球領先的測試測量解決方案提供商Teledyne LeCroy隆重展示了其最新研發的800G網絡測試…

新一代電動門“攻克”行業痛點,遠峰科技打造“智能出入”新標桿

在2025上海國際車展期間&#xff0c;遠峰科技舉辦了一場面向車企合作伙伴和媒體的智能汽車解決方案實車展示會。 在這其中&#xff0c;遠峰科技的新一代電動門首次亮相&#xff0c;突破性的解決了行業普遍存在的“運行抖動不平順”、“窄車位車門開度過小”、“障礙物識別不準…

WEB UI自動化測試之Pytest框架學習

文章目錄 前言Pytest簡介Pytest安裝Pytest的常用插件Pytest的命名約束Pytest的運行方式Pytest運行方式與unittest對比主函數運行命令行運行執行結果代碼說明 pytest.ini配置文件方式運行&#xff08;推薦&#xff09;使用markers標記測試用例 pytest中添加Fixture&#xff08;測…

機器學習簡單概述

Chatgpt回答&#xff1a; 機器學習&#xff1a;機器學習是人工智能的一個分支&#xff0c;側重于通過數據訓練模型&#xff0c;使計算機能夠根據數據進行預測、分類、回歸等任務。它通過算法從歷史數據中學習規律&#xff0c;然后在新數據上進行推斷。機器學習包括多種算法&…

openjdk底層匯編指令調用(一)——匯編指令及指令編碼基礎

匯編指令 計算機在執行過程時只識別代表0或者1的電信號。因此為了讓計算機能夠執行則須向計算機輸入一系列01構成的指令。 例如在x64平臺下&#xff0c;0x53&#xff0c;二進制為01010011&#xff0c;表示將rbx寄存器中的值壓棧。 但是&#xff0c;對于程序員而言&#xff0c;…

Python Day 22 學習

學習講義Day14安排的內容&#xff1a;SHAP圖的繪制 SHAP模型的基本概念 參考學習的帖子&#xff1a;SHAP 可視化解釋機器學習模型簡介_shap圖-CSDN博客 以下為學習該篇帖子的理解記錄&#xff1a; Q. 什么是SHAP模型&#xff1f;它與機器學習模型的區別在哪兒&#xff1f; …

48.輻射發射RE和傳導發射CE測試方法分析

輻射發射RE和傳導發射CE測試方法分析 1. 所有測試項目總結2. 輻射發射RE測試方法3. 傳到發射CE測試方法 1. 所有測試項目總結 所有EMC測試項目都是基于模擬現實的。 模擬現實中可能發生的各種真實場景&#xff0c;然后統計總結出各種場景下的真實應力&#xff0c;并通過制造測…

在 Vue 3 中實現刮刮樂抽獎

&#x1f389; 在 Vue 3 中實現刮刮樂抽獎 當項目中需要做一些活動互動頁時&#xff0c;需要實現刮刮樂&#xff0c;請看如下效果&#xff1a; 這里感謝github用戶Choicc分享的組件&#xff0c;具體可點擊傳送門查看 1. 引入組件 將/src/components下ScratchCard.vue復制到自…

c語言第一個小游戲:貪吃蛇小游戲01

hello啊大家好 今天我們用一個小游戲來增強我們的c語言&#xff01; 那就是貪吃蛇 為什么要做一個貪吃蛇小游戲呢&#xff1f; 因為這個小游戲所涉及到的知識有c語言的指針、數組、鏈表、函數等等可以讓我們通過這個游戲來鞏固c語言&#xff0c;進一步認識c語言。 一.我們先…

實戰項目1(02)

目錄 任務場景一 【sw1和sw2的配置如下】 任務場景二 【sw3的配置】 【sw4-6的配置】 任務場景一 某公司有生產、銷售、研發、人事、財務等多個部門&#xff0c;這些部門分別連接在兩臺交換機&#xff08;SW1和SW2&#xff09;上&#xff0c;現要求給每個部門劃分相應的V…

Kubernetes生產實戰(十四):Secret高級使用模式與安全實踐指南

一、Secret核心類型解析 類型使用場景自動管理機制典型字段Opaque (默認)自定義敏感數據需手動創建data字段存儲鍵值對kubernetes.io/dockerconfigjson私有鏡像倉庫認證kubelet自動更新.dockerconfigjsonkubernetes.io/tlsTLS證書管理Cert-Manager可自動化tls.crt/tls.keykube…

Linux: 信號【阻塞和捕捉信號】

Linux&#xff1a; 信號【阻塞和捕捉信號】 &#xff08;一&#xff09;阻塞信號1.信號其他相關的概念2.在內核中表示3.sigset_t4.信號集操作函數5.sigprocmask&#xff08;設置阻塞&#xff09;6.sigpending&#xff08;得到未決狀態&#xff09; &#xff08;二&#xff09;捕…

MySQL 數據庫集群部署、性能優化及高可用架構設計

MySQL 數據庫集群部署、性能優化及高可用架構設計 集群部署方案 1. 主從復制架構 傳統主從復制&#xff1a;配置一個主庫(Master)和多個從庫(Slave)GTID復制&#xff1a;基于全局事務標識符的復制&#xff0c;簡化故障轉移半同步復制&#xff1a;確保至少一個從庫接收到數據…

Java 多態:原理與實例深度剖析

一、多態概述 在 Java 面向對象編程體系中&#xff0c;多態是構建靈活、可擴展程序的核心機制之一&#xff0c;與封裝、繼承并稱為面向對象的三大特性。其本質是同一操作作用于不同對象&#xff0c;產生不同的執行結果&#xff0c;這使得程序在運行時能根據實際對象類型動態調…

解決使用寶塔Linux部署前后端分離項目遇到的問題

問題一&#xff1a;訪問域名轉圈圈&#xff0c;顯示404,403 沒有解決跨域問題&#xff0c;在后端yml中設置content&#xff1a;/prod&#xff08;生產環境&#xff09;&#xff0c;在前端.env文件中將http&#xff1a;//127.0.0.1:8080/替換為公網IP&#xff0c;并在vite.conf…

《Python星球日記》 第54天:卷積神經網絡進階

名人說&#xff1a;路漫漫其修遠兮&#xff0c;吾將上下而求索。—— 屈原《離騷》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 目錄 一、深度CNN架構解析1. LeNet-5&#xff08;1998&#xff09;2. AlexNet&#x…

旅游設備生產企業的痛點 質檢系統在旅游設備生產企業的應用

在旅游設備制造行業&#xff0c;產品質量直接關系到用戶體驗與企業口碑。從景區纜車、觀光車到水上娛樂設施&#xff0c;每一件設備的安全性與可靠性都需經過嚴苛檢測。然而&#xff0c;傳統質檢模式常面臨數據分散、流程不透明、合規風險高等痛點&#xff0c;難以滿足旅游設備…

MySql(進階)

一.數據庫約束 約束類型 NOT NULL - 指示某列不能存儲 NULL 值。 (not null不能為NILL) UNIQUE - 保證某列的每行必須有唯一的值。 &#xff08;unique唯一值&#xff09; DEFAULT - 規定沒有給列賦值時的默認值。 &#xff08;default為空給定默認值&#xff09; PRIMARY…