Maven 版本管理遵循语义化版本规范(Semantic Versioning),使用三段式版本号格式:MAJOR.MINOR.PATCH。理解 Maven 版本管理对于依赖管理和项目发布至关重要。
版本号格式:
- MAJOR(主版本号):不兼容的 API 修改
- MINOR(次版本号):向下兼容的功能性新增
- PATCH(修订号):向下兼容的问题修正
版本号示例:
1.0.0:第一个稳定版本1.2.3:主版本 1,次版本 2,修订号 32.0.0:不兼容的主版本升级
版本范围限定符:
- 精确版本:
1.0.0,只使用指定版本 - 范围版本:
[1.0,2.0):大于等于 1.0 且小于 2.0(1.0,2.0]:大于 1.0 且小于等于 2.0[1.0,]:大于等于 1.0[,1.0]:小于等于 1.0
- 通配符版本:
1.0.*或1.0:1.0.x 的任意版本1.*或1:1.x 的任意版本
- 最新版本:
LATEST:最新发布版本RELEASE:最新稳定版本
- 快照版本:
1.0-SNAPSHOT,开发中的版本
SNAPSHOT 版本:
- SNAPSHOT 是 Maven 特有的版本标识,表示开发中的版本
- 每次构建时,Maven 会检查远程仓库是否有更新的 SNAPSHOT 版本
- SNAPSHOT 版本不应该在生产环境中使用
- 发布时应该将 SNAPSHOT 替换为正式版本号
版本管理最佳实践:
- 使用 dependencyManagement 统一管理版本:
xml<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.20</version> </dependency> </dependencies> </dependencyManagement>
- 使用 BOM(Bill of Materials)管理版本:
xml<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.7.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
- 使用属性定义版本号:
xml<properties> <spring.version>5.3.20</spring.version> <mybatis.version>3.5.9</mybatis.version> </properties>
版本冲突解决:
- 最短路径优先:选择依赖路径最短的版本
- 声明顺序优先:选择在 pom.xml 中先声明的版本
- 强制指定版本:直接声明需要的版本覆盖传递依赖
版本发布流程:
- 开发阶段使用 SNAPSHOT 版本
- 测试通过后,移除 SNAPSHOT 标识
- 使用
mvn release:prepare准备发布 - 使用
mvn release:perform执行发布 - 发布到仓库供其他项目使用
版本检查命令:
mvn versions:display-dependency-updates:查看可更新的依赖mvn versions:display-plugin-updates:查看可更新的插件mvn versions:display-property-updates:查看可更新的属性mvn versions:use-latest-releases:更新到最新稳定版本
注意事项:
- 避免使用 LATEST 和 RELEASE,可能导致构建不稳定
- 生产环境不使用 SNAPSHOT 版本
- 定期更新依赖版本,修复安全漏洞
- 使用版本范围时要谨慎,避免引入不兼容的更新
- 在 CI/CD 流程中锁定依赖版本,确保构建可重现
合理的版本管理能够提高项目的稳定性和可维护性。