maven pom.xml 配置核心是准确声明项目坐标(groupid、artifactid、version)、按需配置依赖(含 scope 和 exclusions)及构建插件,善用 properties 和 parent 统一管理。

配置 Maven 的 pom.xml 文件,核心是写对项目坐标、依赖和构建行为。它不是“越全越好”,而是按需声明——多数基础字段可省略(如 packaging 默认为 jar),关键在准确表达“我要什么”和“怎么建”。
项目坐标必须写全
这是 Maven 识别项目的唯一依据,缺一不可:
-
groupId:组织标识,通常用域名倒写,比如
com.example -
artifactId:模块名,小写字母+短横线,比如
user-service -
version:版本号,建议带
-SNAPSHOT标识开发中版本,如1.2.0-SNAPSHOT
这三者合起来构成一个构件的完整坐标,Maven 用它从仓库下载、安装或发布 jar 包。文件名默认就是 artifactId-version.jar。
依赖配置要分清 scope 和传递性
<dependencies></dependencies> 块里每个 <dependency></dependency> 至少包含 groupId、artifactId、version。常用补充项有:
-
scope:控制依赖生效阶段
compile(默认)→ 编译、测试、运行都可用;test→ 仅测试编译和运行时有效(如 JUnit);provided→ 编译和测试需要,但运行时由容器/环境提供(如 servlet-api);runtime→ 编译不需要,测试和运行需要(如 JDBC 驱动);import→ 仅用于dependencyManagement中导入 BOM,不参与 classpath 构建。 -
exclusions:显式排除传递依赖中的冲突项
比如引入了某个库,但它偷偷带了一个旧版slf4j,就可以用<exclusion></exclusion>干掉它,再单独声明新版。
常用属性和构建插件别漏掉
<properties></properties> 是简化维护的利器,建议统一定义:
-
java.version:指定源码和目标字节码版本,如17 -
project.build.sourceEncoding:避免中文乱码,设为UTF-8 - 还可自定义变量,比如
spring-boot.version,然后在 dependency 中用${spring-boot.version}引用
<build></build> 下常配编译插件,尤其 Java 版本升级后必须显式声明:
-
maven-compiler-plugin:指定source和target版本 -
maven-surefire-plugin:控制测试执行(如跳过测试:<skiptests>true</skiptests>) -
maven-jar-plugin:定制 MANIFEST.MF 或添加主类(Main-Class)
父 POM 和依赖管理让多模块更可控
如果是 Spring Boot 项目或企业级多模块工程,推荐用 <parent></parent> 继承统一父 POM:
- 自动继承版本、插件配置、默认 scope 等,减少重复
- 配合
<dependencymanagement></dependencymanagement>可集中声明依赖版本,子模块只需写 groupId + artifactId,不用写 version - 注意:
dependencyManagement不会实际引入依赖,只是“约定版本”;真正引入还得靠子模块自己的dependencies










