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

<projectxmlns="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.0http://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•不包含未使用依赖•只保留真实传递依赖•属性已被解析为具体值

开启方式:

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

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

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

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

    processorclasspath-processormodular-processor

    以 Lombok 为例:

    <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 ModulesJava Modules

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

    Maven 4 的选择是:

    modulessubprojectsmodules标记为 deprecated

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

    同时还支持:

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

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


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

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

    Maven 4 引入Tree-based Lifecycle

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

    开启方式:

      mvn -b concurrent verify

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

      1. 条件表达式 Profile

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

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

      2. 统一的 Sources 模型

      Maven 3:

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

        Maven 4:

        <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 还提供了官方升级工具:

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

        它会分析:

        •POM•插件•项目结构

        并给出可执行的升级建议

        本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1200680.shtml

        如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

        相关文章

        收藏!Java程序员转型大模型指南:从入门到落地,抢占AI红利实现薪资跃升

        在人工智能&#xff08;AI&#xff09;技术爆发式迭代的当下&#xff0c;传统编程领域正经历前所未有的职业重构。对于深耕Java开发的程序员而言&#xff0c;从熟悉的企业级应用开发、分布式系统搭建&#xff0c;转向如今炙手可热的大模型领域&#xff0c;绝非简单的技术跨界—…

        Vlm-ClipJsonl代码

        import os import json# 你的实际路径配置&#xff08;无需修改&#xff09; # 脚本所在目录&#xff08;train目录&#xff09; SCRIPT_ROOT os.path.dirname(os.path.abspath(__file__)) # 数据集根路径&#xff08;train/data&#xff09; BASE_PATH os.path.join(SCRIP…

        java_ssm114自行车在线租赁系统设计与实现_idea项目源码

        目录 具体实现截图自行车在线租赁系统设计与实现摘要 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 自行车在线租赁系统设计与实现摘要 自行车在线租赁系统基于SSM&#xff08;SpringSpringM…

        瞧瞧别人家的日志打印,那叫一个优雅!

        前言这篇文章跟大家一起聊聊打印优雅日志的10条军规&#xff0c;希望对你会有所帮助。第1条&#xff1a;格式统一反例&#xff08;管理看到会扣钱&#xff09;&#xff1a;log.info("start process"); log.error("error happen"); 无时间戳&#xff0c;无上…

        java_ssm6专门体检预约管理系统_idea项目源码

        目录具体实现截图系统概述技术架构核心功能模块数据库设计项目亮点系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 系统概述 Java_SSM6专门体检预约管理系统基于SpringSpringMVCMyBatis&#xf…

        [特殊字符] 栈与队列基础知识全面解析

        一、栈(Stack)理论基础 1.1 栈的基本特性 栈是一种后进先出(LIFO, Last In First Out) 的数据结构,操作只在栈顶进行。 // 栈的基本操作 stack<int> st; st.push(1); // 入栈 st.push(2); int top = st.top(); // 查看栈顶元素:2 st.pop(); // 出栈,…

        医疗器械包装运输验证标准:GB/T4857系列标准

        一、GB/T 4857系列核心测试标准解析 GB/T 4857《包装 运输包装件基本试验》系列标准涵盖23个部分&#xff0c;针对医疗器械运输场景&#xff0c;以下核心标准构成了全方位的测试体系&#xff1a; &#xff08;一&#xff09;冲击类试验&#xff1a;模拟碰撞风险 跌落试验&am…

        java_ssm7特产农产品网上商城的设计与实现_idea项目源码

        目录 具体实现截图项目背景与意义技术架构核心功能模块创新点与优势应用价值 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 项目背景与意义 随着互联网技术的发展和农村电商的兴起&#xff0…

        java_ssm115计算机系统在线考试平台_idea项目源码

        目录 具体实现截图计算机系统在线考试平台摘要 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 计算机系统在线考试平台摘要 该在线考试平台基于Java SSM框架&#xff08;SpringSpring MVCMyBa…

        java_ssm8中药中草药商城 供求信息管理系统_idea项目源码

        目录 具体实现截图项目背景与目标技术架构核心功能模块创新与优势适用场景总结 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 项目背景与目标 中药中草药商城供求信息管理系统基于Java SSM框…

        小迪安全2023-2024|第102天:漏洞发现-漏扫项目篇Poc开发Yaml语法插件一键生成匹配结_笔记|web安全|渗透测试|

        第102天&#xff1a;漏洞发现-漏扫项目篇&Poc开发&Yaml语法&插件一键生成&匹配结_笔记 一、漏洞发现—漏扫项目篇&#xfeff;00:15 1. 漏洞扫描工具分类&#xfeff;01:50 综合类工具&#xff1a; BurpSuite&#xff1a;集成化Web应用测试平台&#xff0c;…

        C++中string与char的全面解析

        一、char(字符) 1.1 基本概念 char 是C++中的基本数据类型,用于表示单个字符。 char c = A; // 单个字符用单引号 char zero = 0; // 字符0,ASCII值为48 char space = ; // 空格字符 char newline = \n; // 转义字符1.2 重要特性 大小:通常1字节(8位)…

        如何搭建自动化测试框架?

        &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 最近好多小伙伴都在说接口自动化测试&#xff0c;那么究竟什么是接口自动化测试呢&#xff1f;让我们一起往下看就知道了&#xff0c;首先我们得先弄清楚下面这…

        从Java基础到微服务架构:互联网大厂面试三轮问答实录

        从Java基础到微服务架构&#xff1a;互联网大厂面试三轮问答实录 第一轮&#xff1a;核心语言与平台基础 面试官问&#xff1a; Java中HashMap的底层实现原理是什么&#xff1f;JVM如何进行内存管理&#xff1f;能简单介绍下主要的内存区域吗&#xff1f;在Java中&#xff0c;如…

        java_ssm2家用二手电器回收系统

        目录具体实现截图家用二手电器回收系统摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 家用二手电器回收系统摘要 随着电子产品更新迭代速度加快&#xff0c;大量二手电器被闲置或废弃&…

        java_ssm116课程在线学习评测教学系统智慧学伴服务平台开发_idea项目源码

        目录具体实现截图项目概述核心功能技术架构创新点应用价值系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 项目概述 Java_SSM116课程在线学习评测教学系统智慧学伴服务平台是一个基于SSM&#x…

        EasyGBS打造智慧机场一体化智能监管体系

        在航空运输业高速发展与智慧化转型的时代背景下&#xff0c;机场作为连接空中与地面的关键枢纽&#xff0c;其运营安全、效率和服务质量面临着前所未有的高标准要求。传统机场监控系统普遍存在“信息孤岛”、智能化程度不足、应急响应滞后等痛点。在这一背景下&#xff0c;Easy…

        2026年北京周边诚信的加湿系统专业加盟公司,如何选择?

        2026年健康家居市场持续升温,加湿系统作为改善室内环境、提升居住舒适度的核心设备,其加盟赛道也迎来爆发式增长。无论是解决白粉污染、微生物滋生等用户痛点的创新技术,还是覆盖住宅、商业、医疗等多场景的解决方案…

        java_ssm3Web的篮球CBA联赛信息管理系统

        目录具体实现截图篮球CBA联赛信息管理系统摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 篮球CBA联赛信息管理系统摘要 该系统基于Java SSM&#xff08;SpringSpringMVCMyBatis&#xff09…

        2026年资质齐全的专升本辅导机构,哈尔滨共创专升本值得关注!

        本榜单依托全维度行业调研与真实学员口碑,深度筛选出五家黑龙江省医学专升本领域标杆机构,为医学类专科生选型提供客观依据,助力精准匹配适配的升本辅导伙伴。 TOP1 推荐:哈尔滨共创教育信息咨询有限公司 推荐指数…