相关文档
https://maven.apache.org/guides/mini/guide-migration-to-mvn4.html
https://maven.apache.org/whatsnewinmaven4.html
https://www.baeldung.com/maven-4-upgrades
Maven 4 POM 模型升级:从 4.0.0 到 4.1.0
📦 POM 模型版本升级
新版本声明
xml
<project
xmlns="http://maven.apache.org/POM/4.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.1.0
http://maven.apache.org/xsd/maven-4.1.0.xsd">
<modelVersion>4.1.0</modelVersion>
</project>
兼容性说明
向后兼容:Maven 4 仍然可以构建 4.0.0 版本的 POM
新特性限制:4.1.0 的新功能仅在声明该版本时生效
版本推断:modelVersion 理论上可以省略,Maven 会从 XML schema 推导
🔄 Modules → Subprojects(重要变更)
变更背景
Java 9 引入模块系统后,出现了命名冲突:
Maven Modules(项目模块)
Java Modules(Java 模块系统)
这导致开发者和工具容易产生混淆。
具体变更
重命名: →
兼容处理:modules 标记为 deprecated(但仍可使用)
新语法示例
xml
<subprojects>
<subproject>project-a</subproject>
<subproject>project-b</subproject>
</subprojects>
🚀 新特性与改进
-
Parent 自动推断
支持空的 标签,Maven 会自动识别父项目
简化了子项目的配置
-
子项目自动发现
无需在父 POM 中显式声明所有子项目
Maven 会自动发现符合条件的子项目
-
统一构建时间戳
确保多模块项目中所有子项目使用相同的构建时间戳
提高构建结果的一致性
-
安全发布机制
原子性发布:如果任何子项目构建/发布失败,所有子项目都不会发布
防止发布不一致的状态
📊 升级总结
方面 变更说明
语义层面 明确区分 Maven 项目模块与 Java 模块系统
工程实践 简化配置、提高安全性、增强一致性
兼容性 保持向后兼容,平滑升级路径
💡 建议
新项目建议直接使用 4.1.0 模型版本
现有项目可逐步迁移到 语法
利用新特性简化多模块项目的配置和管理
此次升级是 Maven 对 Java 生态变化的积极响应,既解决了命名冲突问题,又引入了多项实用的工程改进。