maven通过标签定义全局版本占位符实现统一版本管理,支持在dependencies和plugins中用${property.name}引用,仅限等字段,支持继承覆盖与profile环境差异化控制。

在 Maven 中,可以通过 <properties></properties> 标签定义全局版本占位符,实现统一管理依赖、插件或模块版本,避免硬编码和重复修改。
在 pom.xml 的 properties 中定义版本变量
将常用版本号声明为 property,放在 <project></project> 标签下层级的 <properties></properties> 中:
- 位置必须在
<modelversion></modelversion>之后、<dependencies></dependencies>或<dependencymanagement></dependencymanagement>之前 - 命名建议用小写字母加点号或短横线,如
spring-boot.version或junit.version - 值直接写版本字符串,例如
2.7.18,不带引号
示例:
<properties><spring-boot.version>3.2.4</spring-boot.version><junit-jupiter.version>5.10.2</junit-jupiter.version><maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version></properties>
在 dependencies 和 plugins 中引用这些占位符
使用 ${property.name} 语法替换实际版本号,Maven 会在解析时自动展开:
- 依赖中:
<version>${spring-boot.version}</version> - 插件中:
<version>${maven-compiler-plugin.version}</version> - 也可用于
<dependencymanagement></dependencymanagement>统一约束子模块版本
注意:不能在 <groupid></groupid> 或 <artifactid></artifactid> 中使用 property,只支持 <version></version> 和部分插件配置项(如 <source></source>、<target></target>)。
支持多级继承与覆盖机制
父 POM 定义的 property 可被子模块继承;子模块可重新赋值同名 property 实现局部覆盖:
- 父 pom 定义
<logback.version>1.4.11</logback.version> - 子 pom 写
<logback.version>1.4.14</logback.version>即生效 - 命令行也可覆盖:
mvn clean package -Dlogback.version=1.4.14
这种机制适合多模块项目按需升级个别组件,同时保持整体版本基线一致。
配合 profile 实现环境差异化版本控制
在不同 profile 下定义相同 property 名但不同值,结合激活条件切换版本:
<profiles><profile><id>dev</id><properties><my-api.version>1.0.0-SNAPSHOT</my-api.version></properties></profile><profile><id>prod</id><properties><my-api.version>1.0.0-RELEASE</my-api.version></properties></profile></profiles>
运行时用 -Pdev 或 -Pprod 激活对应 profile,版本自动适配。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











