Java精选面试题(微信小程序):5000+道面试题和选择题,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计、大厂真题等,在线随时刷题!

2010 年 Maven 3 发布以来,Maven 对 Java 构建生态的整体支持方式,几乎没有发生过颠覆性的变化。

然而在这 15 年里,Java 世界早已天翻地覆:

•模块化成为标配•并行构建成为刚需•云原生与容器化成为主流•JDK 以一年两个大版本的节奏持续快速演进

相比之下,Maven 本身却显得有些“老态”。

Maven 4 的出现,正是为了解决这些长期积累的历史包袱。

虽然 Maven 4 仍未公布正式 GA 发布日期,但目前已经迭代到第五个发布候选版本(RC5),从项目成熟度和变更稳定性来看,距离正式发布已相当接近。

现在正是提前了解、评估和准备升级的合适时机。

POM 模型升级:从 4.0.0 到 4.1.0

Maven 4 将 POM 的模型版本升级为4.1.0

project>

向后兼容:Maven 4 仍然可以构建 4.0.0 的 POM•新能力只对 4.1.0 生效modelVersion理论上可以省略,Maven 会从 schema 推导

也就是说:

不升级 POM 也能用 Maven 4,但升级后才能真正“吃到红利”。

Build POM / Consumer POM 分离:终于解决“POM 污染”

这是 Maven 4最重要、也是最颠覆性的变化之一。

在 Maven 3 中,发布到仓库的 POM 同时包含:

•插件配置•构建细节•父 POM 引用•各种属性

依赖使用者会被迫解析大量“与我无关”的信息。

Maven 4 的解决方法是POM 扁平化(Flattening)

Maven 4 正式区分:

类型

用途

Build POM

项目自身构建

Consumer POM

提供给依赖方

Consumer POM 具备以下特征:

•不包含插件配置•不包含父 POM•不包含未使用依赖•只保留真实传递依赖•属性已被解析为具体值

开启方式:

mvn clean install -Dmaven.consumer.pom.flatten=true

Maven 3 时代需要额外的 Flatten Maven Plugin,Maven 4 中已成为原生能力

这一步,直接让依赖解析更快、更干净、更可预测。

新 Artifact Type:显式控制 classpath / module path

在 Maven 3 中:

•普通 JAR → classpath•含module-info.class→ module path(自动推断)

这种“隐式规则”在 Java 模块化时代并不够清晰。

Maven 4 新增类型:


 module-jar

开发者终于可以显式声明依赖放在哪里

Maven 4 还新增了专门的注解处理器类型:

processorclasspath-processormodular-processor

以 Lombok 为例:

dependencies>

Maven 4明确区分了 API classpath 与 processor classpath,构建语义更清晰,也更利于工具链优化。

Modules 改名为 Subprojects:为 Java 9 “让路”

Java 9 引入模块系统后:

Maven ModulesJava Modules

长期让新手和工具“集体懵逼”。

Maven 4 的选择是:

modulessubprojectsmodules标记为 deprecated

subprojects>

同时还支持:

Parent 推断:空 自动识别•子项目自动发现:无需显式声明•统一构建时间戳安全发布:子项目失败 → 全部不发布

这是一次语义层面 + 工程实践层面的双重升级。

树形生命周期:并行构建终于“名正言顺”

Maven 3 的生命周期是线性的,即使多模块,也很难高效并行。

Maven 4 引入Tree-based Lifecycle

•每个子项目独立推进生命周期•依赖就绪即可启动•大型多模块构建速度显著提升

开启方式:

mvn -b concurrent verify
配置能力显著增强的“小变化”1. 条件表达式 Profile

   

不再只是os.namejdk这种基础判断,而是真正的表达式系统

2. 统一的 Sources 模型

Maven 3:


 ... testSourceDirectory>

Maven 4:

sources>

更适合:

•多目录•多版本•模块化项目•无插件配置场景

Maven 4 还提供了官方升级工具:

mvnup apply   # 自动修改

它会分析:

•POM•插件•项目结构

并给出可执行的升级建议

来源:xxy开源

公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!

最近有很多人问,有没有读者交流群!加入方式很简单,公众号Java精选,回复“加群”,即可入群!

文章有帮助的话,点在看,转发吧!