Maven POM
Maven POM.xml 完全解析(2025 最新版)
POM = Project Object Model
pom.xml是 Maven 的灵魂,定义项目的一切:坐标、依赖、构建、插件、版本管理…
一、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
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- 1. 模型版本(固定) -->
<modelVersion>4.0.0</modelVersion>
<!-- 2. 项目坐标(GAV) -->
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<!-- 3. 项目信息 -->
<name>My Application</name>
<description>一个 Maven 示例项目</description>
<url>https://example.com</url>
<inceptionYear>2025</inceptionYear>
<!-- 4. 父项目(继承) -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.5</version>
<relativePath/> <!-- 查找父 POM -->
</parent>
<!-- 5. 属性(统一管理版本) -->
<properties>
<java.version>17</java.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<lombok.version>1.18.34</lombok.version>
</properties>
<!-- 6. 依赖管理 -->
<dependencyManagement>
<dependencies>
<!-- 统一版本控制 -->
</dependencies>
</dependencyManagement>
<!-- 7. 依赖 -->
<dependencies>
<!-- 编译依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<!-- 测试依赖 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.3</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 8. 构建配置 -->
<build>
<finalName>my-app</finalName>
<plugins>
<!-- 编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<source>17</source>
<target>17</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- Spring Boot 插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.3.5</version>
</plugin>
</plugins>
</build>
</project>
二、核心元素详解
| 元素 | 说明 | 是否必填 |
|---|---|---|
modelVersion | POM 模型版本,固定 4.0.0 | 必填 |
groupId | 组织/公司名,如 com.example | 必填 |
artifactId | 项目名,如 my-app | 必填 |
version | 版本号,如 1.0.0、1.0.0-SNAPSHOT | 必填 |
packaging | 打包类型:jar(默认)、war、pom | 选填 |
GAV 坐标:
groupId:artifactId:version→ 唯一标识一个构件
三、依赖管理(Dependency)
1. 常见 <scope> 范围
| scope | 说明 |
|---|---|
compile | 默认,编译 + 测试 + 运行 |
provided | 编译 + 测试,运行时由容器提供(如 servlet-api) |
runtime | 测试 + 运行,编译不需要(如 mysql-connector) |
test | 仅测试(如 junit) |
system | 本地 JAR(不推荐) |
2. 排除依赖(exclusions)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.1.2</version>
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
</dependency>
四、属性(Properties)
<properties>
<spring.version>6.1.14</spring.version>
<java.version>17</java.version>
</properties>
使用:${spring.version}
推荐:所有版本号统一在
<properties>管理
五、父子 POM(继承)
父 POM(packaging=pom)
<!-- parent/pom.xml -->
<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<properties>
<spring-boot.version>3.3.5</spring-boot.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
子模块
<parent>
<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>module-a</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 版本由父 POM 管理 -->
</dependency>
</dependencies>
六、插件(Plugins)
| 常用插件 | 用途 |
|---|---|
maven-compiler-plugin | 设置 Java 版本 |
maven-surefire-plugin | 运行单元测试 |
maven-jar-plugin | 定制 JAR 包 |
maven-shade-plugin | 打包“胖 JAR” |
spring-boot-maven-plugin | 打包 Spring Boot 可执行 JAR |
示例:打包可执行 JAR
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.example.App</mainClass>
</configuration>
</plugin>
七、仓库(Repositories)
<repositories>
<repository>
<id>aliyun</id>
<url>https://maven.aliyun.com/repository/public</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>false</enabled></snapshots>
</repository>
</repositories>
推荐在
settings.xml中配置全局镜像
八、最小可用 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
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>hello</artifactId>
<version>1.0</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.3</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
九、POM 最佳实践
| 建议 | 说明 |
|---|---|
所有版本用 <properties> 管理 | 避免版本冲突 |
父 POM 管理 dependencyManagement | 子模块自动继承版本 |
| 避免硬编码路径 | 使用 ${project.basedir} |
使用 maven-enforcer-plugin | 强制 JDK 版本、Maven 版本 |
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<goals><goal>enforce</goal></goals>
<configuration>
<rules>
<requireMavenVersion>
<version>3.8.1</version>
</requireMavenVersion>
<requireJavaVersion>
<version>17</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
十、快速生成 POM(IDEA / 命令行)
IDEA
File → New → Project → Maven- 填写 GAV → 自动生成
pom.xml
命令行
mvn archetype:generate \
-DgroupId=com.example \
-DartifactId=my-app \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false
十一、常见问题
| 问题 | 解决方案 |
|---|---|
Failed to read artifact descriptor | 网络问题 → 配置阿里云镜像 |
Non-resolvable parent POM | 父 POM 不在本地仓库 → mvn install |
ClassNotFoundException | 检查 scope 是否为 provided |
| 依赖冲突 | mvn dependency:tree 查看 → exclusions 排除 |
总结:POM 核心 = GAV + 依赖 + 构建
GAV → 唯一标识
依赖 → 自动管理
构建 → 插件 + 生命周期
下一步推荐
| 方向 | 内容 |
|---|---|
| Spring Boot + Maven | 集成 spring-boot-starter-parent |
| 多模块项目 | 父子 POM 实战 |
| IDEA 调试 POM | 右键 pom.xml → Maven → Reimport |
需要 Spring Boot 完整 POM 示例?回复 Spring Boot POM 立即获取!