Maven POM

Maven POM.xml 完全解析(2025 最新版)

POM = Project Object Model
pom.xmlMaven 的灵魂,定义项目的一切:坐标、依赖、构建、插件、版本管理…


一、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>

二、核心元素详解

元素说明是否必填
modelVersionPOM 模型版本,固定 4.0.0必填
groupId组织/公司名,如 com.example必填
artifactId项目名,如 my-app必填
version版本号,如 1.0.01.0.0-SNAPSHOT必填
packaging打包类型:jar(默认)、warpom选填

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

  1. File → New → Project → Maven
  2. 填写 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 立即获取!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注