Maven4已经悄悄来临

相关文档

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>

🚀 新特性与改进

  1. Parent 自动推断

    支持空的 标签,Maven 会自动识别父项目

    简化了子项目的配置

  2. 子项目自动发现

    无需在父 POM 中显式声明所有子项目

    Maven 会自动发现符合条件的子项目

  3. 统一构建时间戳

    确保多模块项目中所有子项目使用相同的构建时间戳

    提高构建结果的一致性

  4. 安全发布机制

    原子性发布:如果任何子项目构建/发布失败,所有子项目都不会发布

防止发布不一致的状态

📊 升级总结

方面 变更说明

语义层面 明确区分 Maven 项目模块与 Java 模块系统

工程实践 简化配置、提高安全性、增强一致性

兼容性 保持向后兼容,平滑升级路径

💡 建议

新项目建议直接使用 4.1.0 模型版本

现有项目可逐步迁移到 语法

利用新特性简化多模块项目的配置和管理

此次升级是 Maven 对 Java 生态变化的积极响应,既解决了命名冲突问题,又引入了多项实用的工程改进。