news 2026/8/29 9:16:53

Maven 4 终于快来了,新特性很香!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Maven 4 终于快来了,新特性很香!

大家好,我是 Guide!在 Java 生态中,Maven 绝对是大家每天都要打交道的“老朋友”。

InterviewGuide这个开源 AI 项目中,我使用了 Gradle。不过,根据大家的反馈来看还是更愿意使用 Maven 一些。

目前(2026 年 1 月)Maven 4.0 仍处于 Release Candidate 阶段,最新版本为 4.0.0-rc-5(2025 年 11 月 08 日发布),尚未正式 GA(General Availability)。

虽然目前 Maven 4 还处于 Release Candidate(RC)阶段,但它展现出来的特性足以让我们这些长期被 Maven 3 “历史债”折磨的开发者感到兴奋。

一句话总结:Maven 4 要求最低 Java 17 运行环境,通过分离构建与消费模型、树形生命周期等黑科技,彻底告别了臃肿且难以维护的 POM。

下面简单介绍一下 Maven 4 的最重要新特性(基于官方文档和发布记录):

Build POM 与 Consumer POM 的分离

这是 Maven 4 解决的最大痛点。在 Maven 3 时代,你发布的pom.xml既要管“怎么构建”,又要管“别人怎么依赖”,导致发布的元数据极其臃肿,甚至带有大量的 profile 和本地路径。

Maven 4 解决方案

  • Build POM:这就是你本地编辑的pom.xml(模型升级至 4.1.0)。它包含所有的构建细节,比如插件配置、私有 profile 等。
  • Consumer POM:当你执行deploy时,Maven 4 会自动生成一个“纯净版”的pom.xml(固定为 4.0.0 模型)。它去掉了所有插件、build 逻辑和 parent 继承关系,仅保留 GAV 坐标和核心依赖。

默认关闭,需显式开启:

mvn deploy -Dmaven.consumer.pom.flatten=true

或在项目根.mvn/maven-user.properties中永久配置:

maven.consumer.pom.flatten=true

这样的话,发布的 artifact 更干净,依赖解析更快,生态(Gradle、sbt、IDE、Sonatype 等)兼容性更好,无需再依赖 flatten-maven-plugin 等 hack 方案。

POM 模型升级到 4.1.0 + 多项简化语法

Maven 4 引入了全新的命名空间(http://maven.apache.org/POM/4.1.0),并在语法上做了极简主义的改进。

1. 自动发现子项目
  • 新标签<subprojects>:正式取代了容易产生术语混淆的<modules>(标记为 deprecated)。
  • 隐式发现:如果父项目packaging=pom且没有声明子项目,Maven 4 会自动扫描包含pom.xml的直接子目录。再也不用手动一行行写子模块名了!
2. 坐标推断(Inference)

<parent>中,如果你按默认路径放置项目,可以省略versiongroupId甚至整个坐标。Maven 会自动从相对路径推断父 POM 坐标。

3. CI 友好变量原生支持

${revision}${sha1}等变量现在是原生一等公民,不需要再写 hack 插件就能直接在命令行定义版本。

构建性能:从线性生命周期到树形并发

Maven 3 的生命周期是线性的,这意味着如果你的项目很大,构建过程就像“老牛拉破车”。

1. 树形生命周期与钩子

Maven 4 将生命周期升级为树形结构,并引入了before:xxxafter:xxx阶段。你可以更精准地在每个阶段前后绑定插件。

默认还是 Maven 3 时代的线性行为(向后兼容)。

要真正用上树形 + 更细粒度并发,必须显式加参数-b concurrent(或 --builder concurrent)。

2. 并发构建器 (-b concurrent)

传统的并发构建往往受限于父子依赖。Maven 4 的并发构建器只要依赖模块进入 “Ready” 状态就会立即开跑,不再傻等父模块完成所有阶段。

开发者体验优化

1. 构建恢复 (-r / --resume)

大型项目构建到 90% 挂了?在 Maven 4 里直接-r即可从失败处继续,自动跳过已成功的模块。这简直是多模块项目的“救命稻草”。

2. 延迟发布 (deployAtEnd默认开启)

为了防止出现“半成品”发布(一部分模块发了,另一部分报错没发),Maven 4 默认会在所有模块全部构建成功后才进行最后的统一发布。

3. 官方迁移助手 (mvnup)

担心升级出问题?官方直接给了mvnup工具,自动扫描并建议如何将你的 3.x 项目迁移到 4.1.0 模型。

现在该升级吗?

  • 生产环境:由于目前还在 RC 阶段,且最低要求 Java 17,建议观望,等正式 GA 之后再小范围灰度。
  • 新项目/个人实验:强烈建议开启POM 4.1.0进行尝试。特别是 Build/Consumer POM 的分离,能让你的项目元数据管理水平提升一个档次。
  • 大厂多模块项目:如果你深陷“Maven 构建慢、POM 维护难”的泥潭,Maven 4 的并发构建和自动子项目发现正是你需要的解药。

面对 Maven 二十年来最大的变动,你最期待哪个功能?或者你已经转向了 Gradle?欢迎在评论区留言,我们一起“对齐”一下!

相关地址:

  • Maven 发布记录:https://maven.apache.org/ref/
  • 迁移到 Maven4:https://maven.apache.org/guides/mini/guide-migration-to-mvn4.html
  • Maven4 介绍:https://maven.apache.org/whatsnewinmaven4.html
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 8:23:47

Docker Swarm ES集群基本维护

文章目录 一、运维视角:集群状态与监控(1-5) 例1:查看 ES 集群健康状态(核心运维) 例2:查看集群所有节点信息 例3:查看集群基本信息(版本、名称) 例4:查看集群所有索引列表 例5:查看节点 JVM 内存使用情况 二、开发+运维:索引基础操作(6-9) 例6:创建自定义索引…

作者头像 李华
网站建设 2026/8/21 14:04:20

关于单元测试编写原则的一些思考

目的 单元测试编写的目的&#xff0c;是面向计算机特性的&#xff0c;基于函数的in-out&#xff0c;所以单元测试的好帮手就是断言&#xff0c;通过不断的构造输出并对结果进行断言&#xff0c;我们就可以针对一个对象以及它的函数&#xff0c;构建出充足的用例去包裹它&#…

作者头像 李华
网站建设 2026/8/21 14:03:34

前端项目打包部署完整流程

1. 环境准备确认项目为 Vue.js 前端项目已安装 Node.js (> 14.0.0) 和 npm (> 6.0.0)项目依赖已安装 (node_modules)2. 选择打包环境根据部署环境选择对应的打包命令:测试环境: npm run build:test生产环境: npm run build:prod3. 执行打包# 进入项目目录 cd web-master-…

作者头像 李华
网站建设 2026/8/29 6:03:33

大模型智能体记忆管理新范式:Agentic Memory框架详解

阿里巴巴与武汉大学联合提出的Agentic Memory (AgeMem)框架解决了大语言模型智能体在长周期推理任务中的记忆管理问题。该框架通过基于工具的统一接口将长期记忆(LTM)和短期记忆(STM)集成到智能体决策过程中&#xff0c;并采用三阶段渐进式强化学习策略和逐步式GRPO机制。在多个…

作者头像 李华
网站建设 2026/8/22 5:50:23

网友直呼不可能,重庆到河南居然仅200公里

在我们许多人印象中&#xff0c;地处西南的重庆与坐落于中原的河南相隔千山万水&#xff0c;然而仔细查看地图会发现&#xff0c;两省市最近处直线距离仅约200公里。 这一数字让人惊叹不已&#xff0c;甚至有网友直呼不可能。 但从地图上测量的结果来看&#xff0c;重庆到河南…

作者头像 李华