Maven核心配置文件pom.xml使用及說明
創(chuàng)建項目的步驟

可以直接用Springboot項目來創(chuàng)建:因為會生成一些所需的文件。不需要的文件可以刪除。
創(chuàng)建后的效果

創(chuàng)建過程
- 1、先創(chuàng)建health_parent父工程,package指定為POM
- 2、配置maven工程路徑

- 3、配置項目的 JDK版本



- 4、創(chuàng)建其他子模塊工程
Maven
定義
Maven 是一個強大的項目管理和構建自動化工具(插件),廣泛用于 Java 項目的構建、依賴管理和項目報告。
Maven 工程有約定的目錄結構,約定的目錄結構對于 Maven 實現(xiàn)自動化構建而言是必不可少的一環(huán),就拿自動編譯來說,Maven 必須 能找到 Java 源文件,下一步才能編譯,而編譯之后也必須有一個準確的位置保持編譯得到的字節(jié)碼文件。

用途
以下是 Maven 的一些主要用途:
項目構建(自動化構建)
Maven 提供了標準的構建生命周期,包括編譯、測試、打包、部署等。
這些生命周期都提供相應的插件。
依賴管理(依賴范圍、依賴傳遞)
- 依賴管理:自動下載和管理項目所需的第三方庫(依賴)
- 依賴范圍:Maven 支持定義依賴的范圍(如 compile、test、provided 等),從而控制依賴在不同構建階段的使用。
- 依賴傳遞:Maven 支持依賴的傳遞性,即如果項目 A 依賴于項目 B,項目 B 依賴于項目 C,那么項目 A 也會自動依賴于項目 C。
項目管理(支持多模塊)
Maven 支持多模塊項目,通過父 POM 和子模塊的結構,可以方便地管理大型項目的各個子模塊。
發(fā)布管理(打好的包發(fā)布)
發(fā)布到倉庫:Maven 可以將構建好的包發(fā)布到本地或遠程 Maven 倉庫,方便其他項目引用。
發(fā)布插件:Maven 提供了發(fā)布插件,可以自動化發(fā)布過程,例如生成發(fā)布版本、發(fā)布到 Maven 中央倉庫等。
繼承(pom)和聚合(module)
繼承:子工程可以用到父工程的東西。
在父工程中統(tǒng)一管理項目中的依賴信息,具體來說是管理依賴信息的版本。
父工程創(chuàng)建好之后,要修改它的打包方式:
<!-- 當前工程作為父工程,它要去管理子工程,所以打包方式必須是 pom --> <packaging>pom</packaging>
只有打包方式為 pom 的 Maven 工程能夠管理其他 Maven 工程。打包方式為 pom 的 Maven 工程中不寫業(yè)務代碼,它是專門管理其他 Maven 工程的工程,所以可以將生成的 src 目錄刪除。
聚合:使用一個總工程將各個模塊工程匯集起來,作為一個整體對應完整的項目,實際就是 module 標簽。
什么是pom.xml
pom.xml是Maven項目的核心配置文件,它是 項目對象模型 - Project Object Model(POM)的縮寫。
它使用 XML 格式定義了項目的基本信息、依賴項、構建插件和任務等。使用pom.xml,我們可以輕松地管理項目的構建和依賴關系,讓我們能夠更專注于業(yè)務邏輯的開發(fā)。
pom.xml文件結構
pom.xml 文件通常的結構如下所示,主要用于定義 Maven 項目的配置信息和構建過程中所需的各種依賴和插件:
<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>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<!-- 項目依賴 -->
<dependencies>
<dependency>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<scope>...</scope>
</dependency>
<!-- 可以有多個依賴項 -->
</dependencies>
<!-- 構建配置 -->
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<plugins>
<plugin>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<!-- 插件配置 -->
</plugin>
<!-- 可以有多個插件 -->
</plugins>
</build>
<!-- 倉庫配置 -->
<repositories>
<repository>
<id>...</id>
<url>...</url>
</repository>
<!-- 可以有多個倉庫 -->
</repositories>
</project>詳細解釋:
<modelVersion>:目前是 4.0.0。( POM 模型的版本)<groupId>: 項目組織或公司的唯一標識符。(可以自定義com.xxx)<artifactId>: 項目的唯一標識符,(通常是項目名稱)<version>: 項目的當前版本號。<scope>:指定依賴項在項目中的使用范圍。<packaging>: 例如 jar、war 等。(項目的打包方式)<dependencies>: 項目依賴的外部庫或模塊。
<dependency>
<groupId>com.sky</groupId>
<artifactId>sky-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency><build>: Maven 構建過程的配置信息,包括源碼目錄、測試目錄和插件配置。<plugins>: 在構建過程中使用的 Maven 插件。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin><repositories>: Maven 從中獲取依賴項和插件的倉庫列表。
dependency
與項目的依賴列表相關的標簽最外層由 <dependencies>來囊括,內(nèi)部包含了各種具體的依賴
- <dependency>,該標簽用于指定一個依賴項,它包含以下幾個子標簽
- <groupId>:指定依賴項的groupId,項目的組名
- <artifactId>:指定依賴項的artifactId,項目的唯一標識符
- <version>:指定依賴項的版本號。
- <scope>:指定依賴項在項目中的使用范圍。
其中的 <scope>一般包含以下幾種范圍:常用的有compile、test、provided 和 runtime
- compile:依賴庫默認的 scope,表示該依賴庫在編譯、測試、運行時均需要使用。
- provided:表示該依賴庫只在編譯和測試時需要使用,而在運行時已經(jīng)被系統(tǒng)或者容器提供,所以不需要打包到最終的應用程序中。
- runtime:表示該依賴庫只在運行時需要使用,而在編譯和測試時則不需要。
- test:表示該依賴庫只在測試時需要使用,而在編譯和運行時則不需要。
repository
當然,我們還能在pom文件中支持指定Maven倉庫,即使用 <repositories> 和 <repository>標簽,
<repository>用于指定一個Maven倉庫,它包含以下幾個子標簽:
- <id>:指定Maven倉庫的ID。
- <name>:指定Maven倉庫的名稱。
- <url>:指定Maven倉庫的URL
properties
properties 嚴格來說,并不一定是項目本身的信息,而是人為設置的屬性或者說宏,這個標簽用來定義和管理項目中所需要的屬性,其作用有以下幾個:
- 統(tǒng)一管理項目中的常用屬性,比如版本號、路徑、插件版本等,方便統(tǒng)一修改和管理。
- 可以在配置過程中使用 ${…}占位符引用這些屬性,使得配置更加靈活和便捷。
- 避免硬編碼,提高代碼的可維護性和可讀性
比如說我們可以這么配
<properties>
<project.name>demo-project</project.name>
<project.version>1.0.0</project.version>
<jdk.version>1.8</jdk.version>
</properties>
....省略其余部分
<dependency>
<groupId>com.example.demo</groupId>
<artifactId>${project.name}-api</artifactId>
<version>${project.version}</version>
</dependency>parent
在 Maven 的 pom.xml 文件中,<parent> 元素是用來指定當前項目繼承的父項目(Parent Project)的配置信息。這種配置方式被稱為 “繼承” 或者 “繼承機制”,允許子項目繼承父項目的配置,從而簡化項目的管理和維護。
<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>
<groupId>com.example.myproject</groupId>
<artifactId>myproject-core</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<!-- 繼承自父項目 -->
<parent>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0.0</version>
</parent>
<!-- 其他配置 -->
<dependencies>
<!-- 項目依賴 -->
</dependencies>
<build>
<!-- 構建配置 -->
</build>
<repositories>
<!-- 倉庫配置 -->
</repositories>
</project>在這個例子中:
<parent>元素中的<groupId>、<artifactId>和<version>指定了父項目的坐標信息。- 當前項目(
myproject-core)繼承自parent-project,因此會繼承父項目中定義的基本配置,如版本管理、插件管理等。 - 在
<dependencies>、<build>和<repositories>等部分,可以定義當前項目自己的特定配置,這些配置會與父項目的配置合并或覆蓋,以形成最終的項目配置。
通過使用 <parent> 元素,可以避免在子項目中重復定義相同的配置信息,提高項目的一致性和可維護性。
父工程的作用
以下是父工程的 pom.xml 文件的主要作用:
繼承與共享配置
- 繼承屬性:子模塊通過
<parent>標簽指定父 POM,從而繼承父 POM 中的所有屬性、依賴、插件配置等。 - 共享配置:父 POM 可以定義一些公共的配置,例如編譯插件的版本、資源過濾規(guī)則等。這樣,所有子模塊都可以共享這些配置,減少了重復代碼,提高了維護性。
統(tǒng)一管理依賴
- 依賴版本管理:父 POM 文件通常會定義項目所使用的依賴庫的版本號。子模塊可以直接引用這些依賴,而不需要顯式指定版本號。這樣可以確保整個項目使用一致的依賴版本,避免版本沖突。
- 依賴管理:通過
<dependencyManagement>標簽,父 POM 可以集中管理所有子模塊的依賴。這意味著子模塊只需要聲明依賴的坐標(groupId 和 artifactId),而不需要指定版本。版本由父 POM 統(tǒng)一管理。
項目模塊化和簡化維護
- 模塊聲明:父 POM 文件中可以聲明項目的各個子模塊。通過
<modules>標簽,父 POM 可以定義哪些子模塊屬于當前項目,這樣 Maven 就可以在構建時按照模塊依賴關系進行構建。 - 集中管理:通過父 POM,項目的核心配置集中在父 POM 文件中,減少了子模塊的配置復雜度。如果需要修改全局配置,只需修改父 POM 文件即可。
注意事項:拿到初始化代碼可以通過編譯父工程,查看子模塊的代碼是否能編譯成功。如果能編譯成功說明沒問題,可以正常啟動項目。
項目實際應用

父工程pom文件
<?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">
<!-- POM 模型版本。 -->
<modelVersion>4.0.0</modelVersion>
<!-- <parent>: 定義了當前項目的父項目。這意味著當前項目是一個 Spring Boot 項目 -->
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.7.3</version>
</parent>
<!-- 項目基本信息 -->
<groupId>com.sky</groupId>
<artifactId>sky-take-out</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<!-- <modules>: 定義了當前項目的子模塊。 -->
<modules>
<module>sky-common</module>
<module>sky-pojo</module>
<module>sky-server</module>
</modules>
<!-- <properties>: 定義了一些屬性及其對應的值,這些屬性可以在后續(xù)的配置中引用。 -->
<!-- 后續(xù)可以通過 ${mybatis.spring} 引用這個值。 -->
<properties>
<mybatis.spring>2.2.0</mybatis.spring>
<lombok>1.18.20</lombok>
<fastjson>1.2.76</fastjson>
<commons.lang>2.6</commons.lang>
<druid>1.2.1</druid>
<pagehelper>1.3.0</pagehelper>
<aliyun.sdk.oss>3.10.2</aliyun.sdk.oss>
<knife4j>3.0.2</knife4j>
<aspectj>1.9.4</aspectj>
<jjwt>0.9.1</jjwt>
<jaxb-api>2.3.1</jaxb-api>
<poi>3.16</poi>
</properties>
<!-- <dependencyManagement>: 定義了依賴管理的配置。這個部分不會直接引入依賴,而是聲明了這些依賴的版本和作用范圍。 -->
<!-- 子模塊在引用這些依賴時,可以直接使用這些定義好的版本號,而不需要在每個子模塊中單獨指定。 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.spring}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson}</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>${commons.lang}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid}</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper}</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>${knife4j}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj}</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jjwt}</version>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun.sdk.oss}</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${jaxb-api}</version>
</dependency>
<!-- poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi}</version>
</dependency>
<!--微信支付-->
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-apache-httpclient</artifactId>
<version>0.4.8</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
子工程pom文件
<?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">
<!-- parent 元素定義了當前 Maven 項目的父項目。 -->
<parent>
<artifactId>sky-take-out</artifactId>
<groupId>com.sky</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<!-- 項目基本信息 -->
<modelVersion>4.0.0</modelVersion>
<artifactId>sky-server</artifactId>
<dependencies>
<!-- 引入sky-common模塊 -->
<dependency>
<groupId>com.sky</groupId>
<artifactId>sky-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- 引入sky-pojo模塊 -->
<dependency>
<groupId>com.sky</groupId>
<artifactId>sky-pojo</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- Spring Boot 的核心依賴,包含了 Spring 框架、日志、自動配置等功能。 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- Spring Boot 的測試依賴,用于編寫單元測試和集成測試。 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring Boot 的 Web 依賴,用于構建 Web 應用,包含 Tomcat 和 Spring MVC。-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<scope>compile</scope>
</dependency>
<!-- MySQL 數(shù)據(jù)庫驅(qū)動依賴,用于連接 MySQL 數(shù)據(jù)庫。-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- MyBatis 框架的 Spring Boot 啟動器,用于簡化 MyBatis 的配置。-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!-- Lombok 庫,通過注解消除 Java 代碼中的樣板代碼(如 getter、setter、構造函數(shù)等)。-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- fastjson 阿里巴巴的 JSON 庫,用于 JSON 序列化和反序列化。 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<!-- 阿里巴巴的 Druid 數(shù)據(jù)庫連接池的 Spring Boot 啟動器。 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<!-- MyBatis 的分頁插件 PageHelper 的 Spring Boot 啟動器。 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
<!-- aspectjrt 和 aspectjweaver:AspectJ 運行時庫,用于支持 AOP(面向切面編程)。 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<!-- Knife4j 是一個基于 Swagger 的增強 UI 庫,用于生成 API 文檔。 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>
<!-- Spring Boot 的 Redis 依賴,用于操作 Redis 數(shù)據(jù)庫。 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- spring-boot-starter-cache:Spring Boot 的緩存依賴,支持多種緩存機制。 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!-- Spring Boot 的 WebSocket 依賴,用于構建實時通信應用。 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<!-- jaxb-api:用于 Java 對象與 XML 之間的轉換。 -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<!--poi 和 poi-ooxml:Apache POI 庫,用于操作 Microsoft Office 文檔(如 Excel)-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
</dependencies>
<!-- build 元素定義了 Maven 項目的構建配置。-->
<build>
<plugins>
<!-- spring-boot-maven-plugin:Spring Boot 的 Maven 插件,用于打包 Spring Boot 應用。 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringBoot整合(ES)ElasticSearch7.8實踐
本文詳細介紹了SpringBoot整合ElasticSearch7.8的教程,涵蓋依賴添加、客戶端初始化、索引創(chuàng)建與獲取、批量插入數(shù)據(jù)等核心步驟,結合官方文檔指引及Lombok簡化實體類配置,提供完整實踐方案2025-07-07
SpringBoot?整合數(shù)據(jù)源的具體實踐
本文主要介紹了SpringBoot?整合數(shù)據(jù)源的具體實踐,利用?Spring?Boot?的自動配置和簡化的注解來簡化數(shù)據(jù)源配置工作,從而更專注于應用程序的業(yè)務邏輯開發(fā),感興趣的可以了解一下2023-11-11
SpringBoot集成JPA持久層框架,簡化數(shù)據(jù)庫操作
JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化規(guī)范。主要是為了簡化持久層開發(fā)以及整合ORM技術,結束Hibernate、TopLink、JDO等ORM框架各自為營的局面。JPA是在吸收現(xiàn)有ORM框架的基礎上發(fā)展而來,易于使用,伸縮性強。2021-06-06
Java實現(xiàn)企業(yè)發(fā)放的獎金根據(jù)利潤提成問題
這篇文章主要介紹了請利用數(shù)軸來分界,定位。注意定義時需把獎金定義成長整型,需要的朋友可以參考下2017-02-02
Spring裝配Bean之用Java代碼安裝配置bean詳解
這篇文章主要給大家介紹了關于Spring裝配Bean之用Java代碼安裝配置bean的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用spring具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧。2017-10-10
spring-boot 多線程并發(fā)定時任務的解決方案
這篇文章主要介紹了spring-boot 多線程并發(fā)定時任務的解決方案,需要的朋友可以參考下2019-08-08

