Maven POM文件指南POM(Project Object Model)是Maven项目的核心配置文件,采用XML格

1. POM是什么?

POM(Project Object Model)是Maven项目的核心配置文件,采用XML格式。它不仅仅是构建配置文件的集合,更是项目的"身份证明"和"构建蓝图"。一个完整的POM文件定义了项目的所有元信息、依赖关系、构建过程和环境配置。

2. POM文件结构详解

2.1 基础结构

每个pom.xml都必须包含的基本元素:

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">

4.0.0

com.company.project

my-application

1.0.0-SNAPSHOT

jar

2.2 Maven世界的身份证: GAV坐标

groupId:组织或公司标识,通常使用反向域名规则

示例:com.apache.maven, org.springframework.boot

artifactId:项目名称,在组织内唯一

示例:spring-core, maven-compiler-plugin

version:项目版本,遵循语义化版本规范

示例:1.0.0, 2.5.4-RELEASE, 3.0.0-SNAPSHOT

packaging:打包方式,决定构建生命周期和产出物

jar:Java库(默认)

war:Web应用程序

pom:父项目或聚合项目

ear:企业级应用程序

3. 依赖管理:dependencies

3.1 基本依赖配置

org.springframework

spring-core

5.3.8

compile

false

commons-logging

commons-logging

3.2 依赖范围(scope)

compile:默认范围,参与编译、测试、运行

provided:编译和测试需要,但运行时由容器提供

runtime:运行和测试需要,但编译不需要

test:仅测试需要

system:系统依赖,需要显式指定路径

import:仅用于dependencyManagement中

4. 构建配置:build

4.1 基本构建配置

${project.artifactId}-${project.version}

src/main/resources

**/*.properties

**/*.xml

true

org.apache.maven.plugins

maven-compiler-plugin

3.8.1

17

17

UTF-8

5. 属性管理:properties

5.1 统一定义和管理属性

UTF-8

UTF-8

5.3.8

5.7.2

2.14.1

17

17

/opt/applications

org.springframework

spring-core

${spring.version}

6. 多模块项目:modules

6.1 项目聚合(Aggregation)

4.0.0

com.company

parent-project

1.0.0

pom

core-module

web-module

service-module

7. 父POM与继承机制

71. 父POM配置

4.0.0

com.company

company-parent

1.0.0

pom

17

UTF-8

org.springframework.boot

spring-boot-dependencies

2.5.4

pom

import

org.apache.maven.plugins

maven-compiler-plugin

3.8.1

${java.version}

${java.version}

org.projectlombok

lombok

1.18.20

provided

7.2 子模块继承

4.0.0

com.company

company-parent

1.0.0

../parent/pom.xml

my-module

org.springframework.boot

spring-boot-starter-web

8. dependencyManagement vs dependencies

8.1 dependencyManagement

作用:声明依赖版本,不实际引入依赖

使用场景:在父POM中统一管理版本

优点:统一版本控制,避免冲突

8.2 dependencies

作用:实际引入依赖

使用场景:在需要依赖的模块中声明

优点:明确模块的依赖关系

9. 插件配置:plugins

9.1 常用插件配置示例

org.apache.maven.plugins

maven-compiler-plugin

3.8.1

17

17

-parameters

org.apache.maven.plugins

maven-jar-plugin

3.2.0

true

com.company.MainApp

10. 完整POM示例

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">

4.0.0

com.example.company

business-app

1.0.0-SNAPSHOT

jar

Business Application

企业级业务应用系统

http://www.example.com

17

UTF-8

5.3.8

5.7.2

org.springframework

spring-framework-bom

${spring.version}

pom

import

org.springframework

spring-context

org.springframework

spring-web

org.junit.jupiter

junit-jupiter

${junit.version}

test

org.apache.maven.plugins

maven-compiler-plugin

3.8.1

${java.version}

${java.version}

11. 最佳实践

统一版本管理:使用properties统一定义版本号

合理使用继承:通过父POM管理公共配置

明确依赖范围:正确使用scope避免依赖污染

插件版本固定:明确指定插件版本保证构建稳定性

模块化设计:大型项目使用多模块结构

通过深入理解POM的各个组成部分,你可以更好地组织和管理Maven项目,提高开发效率和项目质量。