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 立即获取!