当前位置: 首页 > news >正文

重磅!Maven 4 官宣:历时15年,Java构建工具迎来彻底重构

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:

ini

<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 会从 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
  • 不包含未使用依赖
  • 只保留真实传递依赖
  • 属性已被解析为具体值

开启方式:

ini

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 新增类型:

lua

<type>classpath-jar</type> <type>module-jar</type>

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

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

  • processor
  • classpath-processor
  • modular-processor

以 Lombok 为例:

xml

<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <type>classpath-processor</type> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope> </dependency> </dependencies>

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

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

Java 9 引入模块系统后:

  • Maven Modules
  • Java Modules

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

Maven 4 的选择是:

  • modules → subprojects
  • modules 标记为 deprecated
xml

<subprojects> <subproject>project-a</subproject> <subproject>project-b</subproject> </subprojects>

同时还支持:

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

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

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

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

Maven 4 引入 Tree-based Lifecycle:

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

开启方式:

css

mvn -b concurrent verify

配置能力显著增强的“小变化”

1. 条件表达式 Profile

scss

<condition> exists('${project.basedir}/src/**/*.xsd') && length(${user.name}) > 5 </condition>

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

2. 统一的 Sources 模型

Maven 3:

xml

<sourceDirectory>...</sourceDirectory> <testSourceDirectory>...</testSourceDirectory>

Maven 4:

xml

<sources> <source> <scope>main</scope> <directory>my-custom-dir/foo</directory> </source> <source> <scope>test</scope> <directory>my-custom-dir/bar</directory> </source> </sources>

更适合:

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

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

bash

mvnup check # 只生成报告 mvnup apply # 自动修改

它会分析:

  • POM
  • 插件
  • 项目结构

并给出 可执行的升级建议。

http://www.jsqmd.com/news/309872/

相关文章:

  • 面了个腾讯30k出来的,让我见识到什么叫“精通MySQL调优”
  • MyBatis-Plus Mapper 完全指南:从基础用法到高级扩展
  • 2000道面试必问的Java面试八股文及答案整理(2025版)
  • 袋鼠云产品功能更新报告(第16期)|离线开发新进化:AI辅助与架构升级
  • 2026年西安考驾照选哪家驾校好?最新西安驾校推荐与对比指南
  • 计算机毕业设计springboot高校大学生实习服务管理系统 基于SpringBoot的高校学生顶岗实践与就业跟踪服务平台 SpringBoot架构下的高校校企协同实习智能化管理平台
  • 2026年哪款减肥产品最好用?7 款瘦身塑形好物,权威数据+真实好评双认证避坑指南
  • pandas 3.0 内存调试指南:学会区分真假内存泄漏
  • 计算机毕业设计springboot高校电动车充电桩管理系统 基于SpringBoot架构的高校校园智慧充电设施运维服务平台 SpringBoot驱动的高校电动车辆能源补给与设备监控管理系统
  • 弦论:高度创造性但因果链断裂、数学自洽但递归不健康
  • Java毕设选题推荐:基于Springboot新能源汽车4s店维修保养服务管理系统springboot的汽车维修保养服务信息系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 计算机Java毕设实战-基于springboot+vue的汽车维修保养管理系统基于Java 的基于springboot的汽车维修保养服务信息系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • Java毕设项目:基于springboot的erp仓储管理系统(源码+文档,讲解、调试运行,定制等)
  • 【课程设计/毕业设计】基于Java springboot4s店车辆管理系统车辆预约保养维修基于springboot的汽车维修保养服务信息系统【附源码、数据库、万字文档】
  • windows安装nvm/node/npm/pnpm
  • Java计算机毕设之基于springboot的汽车维修保养服务信息系统基于Java springboot4s店车辆管理系统车辆预约保养维修(完整前后端代码+说明文档+LW,调试定制等)
  • 【毕业设计】基于springboot的erp仓储管理系统(源码+文档+远程调试,全bao定制等)
  • Java毕设项目推荐-基于springboot的汽车维修保养服务信息系统基于 SpringBoot 的汽车维修预约服务系统设计与实现【附源码+文档,调试定制服务】
  • 宏智树 AI 科普:毕业论文不是 “憋” 出来的,是 “搭” 出来的智能写作指南
  • 宏智树 AI:文献综述告别 “复制粘贴”,AI 帮你梳理研究脉络,1 天搞定 3 万字学术综述
  • 5 款 AI 写论文哪个好?宏智树 AI 实测登顶!真实素材 + 全流程赋能完胜
  • 9 款 AI 写论文哪个好?实测后认准宏智树 AI:文献真实、图表可溯源,毕业论文一站式通关
  • 写论文软件哪个好?宏智树AI:从开题到答辩的毕业论文全周期助手
  • 宏智树 AI:ChatGPT 学术版驱动的一站式论文写作智能解决方案
  • 企业级BI新标准:衡石科技如何保障高并发、多租户与数据安全
  • 企业培训系统源码开发方案:功能模块、架构与应用场景
  • 视频:SPSS与Python用Resblock优化BP神经网络分析慢性胃炎病历数据聚类K-means/AGNES、关联规则挖掘及预测
  • 如何在有或没有备份的 iPhone 上检索已删除的短信
  • 如何将通话记录从Android传输到PC
  • Java计算机毕设之基于springboot的超市仓库管理系统基于java+springboot的超市仓库管理系统(完整前后端代码+说明文档+LW,调试定制等)