👉 这是一个或许对你有用 的社群
🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:
-
《项目实战(视频)》:从书中学,往事中**"练"**
-
《互联网高频面试题》:面朝简历学习,春暖花开
-
《架构 x 系统设计》:摧枯拉朽,掌控面试高频场景题
-
《精进 Java 学习指南》:系统学习,互联网主流技术栈
-
《必读 Java 源码专栏》:知其然,知其所以然

👉这是一个或许对你有用的开源项目
国产Star破10w的开源项目,前端包括管理后台、微信小程序,后端支持单体、微服务架构
RBAC权限、数据权限、SaaS多租户、商城 、支付、工作流、大屏报表、ERP、CRM 、AI大模型、IoT物联网等功能:
【国内首批】支持 JDK17/21+SpringBoot3、JDK8/11+Spring Boot2双版本
Maven 3 发布于 2010 年。15 年过去了,Java 世界天翻地覆------模块化成标配、并行构建成刚需、云原生成主流、JDK 一年两个大版本------但 Maven 本身几乎没动过。
Maven 4 就是来还这 15 年的技术债的。
目前已迭代到 RC5(第五个发布候选版本) ,虽然还没 GA,但从变更稳定性来看,正式发布已近在眼前。现在是提前了解和准备升级的最佳时机。
POM 模型升级到 4.1.0:不升也能用,但升了才有红利
go
<project xmlns="http://maven.apache.org/POM/4.1.0">
<modelVersion>4.1.0</modelVersion>
</project>
-
完全向后兼容 :Maven 4 能构建 4.0.0 的 POM
-
新能力只对 4.1.0 生效
-
modelVersion可以省略,Maven 从 schema 自动推导
说白了: 不改 POM 也能跑 Maven 4,但不升级就是白装。
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
Build POM / Consumer POM 分离:最重要的一刀
这是 Maven 4 最颠覆性的变化 。
Maven 3 的痛点:发布到仓库的 POM 包含插件配置、构建细节、父 POM 引用、各种属性------依赖你的项目被迫解析大量"与我无关"的信息。这就是所谓的 POM 污染 。
Maven 4 把 POM 一分为二:
| 类型 | 用途 |
|---|---|
| Build POM | 项目自身构建用 |
| Consumer POM | 提供给依赖方,干干净净 |
Consumer POM 不包含插件配置、父 POM、未使用依赖,属性全部解析为具体值。
go
mvn clean install -Dmaven.consumer.pom.flatten=true
Maven 3 时代需要额外装 Flatten Maven Plugin,Maven 4 直接内置了。 依赖解析更快、更干净、更可预测。
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
新 Artifact Type:classpath 和 module path 终于能显式控制
Maven 3 的规则是:普通 JAR 走 classpath,有 module-info.class 走 module path------全靠自动推断。Java 模块化时代,这种"隐式规则"经常让人踩坑。
Maven 4 新增显式声明:
go
<type>classpath-jar</type>
<type>module-jar</type>
注解处理器也有了专用类型(processor、classpath-processor、modular-processor)。拿 Lombok 举例:
go
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<type>classpath-processor</type>
</dependency>
API classpath 与 processor classpath 明确分离, 构建语义更清晰,工具链优化也有了基础。
Modules 改名 Subprojects:跟 Java 9 的"撞名"终于解决了
Maven 的 modules 和 Java 9 的 modules 长期让人"集体懵逼"。Maven 4 做了果断选择:
go
<subprojects>
<subproject>project-a</subproject>
<subproject>project-b</subproject>
</subprojects>
旧的 modules 标记废弃。同时还带来了几个实用改进:
-
Parent 自动推断 :空
<parent />自动识别 -
子项目自动发现 :不用挨个声明
-
统一构建时间戳
-
安全发布 :一个子项目失败 → 全部不发布
树形生命周期:并行构建终于"名正言顺"
Maven 3 的生命周期是线性的,多模块并行效率很低。Maven 4 引入 Tree-based Lifecycle ------每个子项目独立推进,依赖就绪即可启动,大型多模块构建速度显著提升。
go
mvn -b concurrent verify
两个"小变化",实际影响不小
1. 条件表达式 Profile
go
<condition>
exists('${project.basedir}/src/**/*.xsd')
&& length(${user.name}) > 5
</condition>
不再只有 os.name、jdk 这种基础判断,而是真正的表达式系统 。
2. 统一的 Sources 模型
Maven 3 只能指定一个源目录,Maven 4 支持多目录声明:
go
<sources>
<source>
<scope>main</scope>
<directory>my-custom-dir/foo</directory>
</source>
<source>
<scope>test</scope>
<directory>my-custom-dir/bar</directory>
</source>
</sources>
多目录、多版本、模块化项目终于不用靠插件 hack 了。
官方升级工具:两行命令搞定迁移评估
go
mvnup check # 生成报告
mvnup apply # 自动修改
自动分析 POM、插件、项目结构,给出可执行的升级建议。如果你管着一堆 Maven 项目,这个工具省的时间比你想的多。
欢迎加入我的知识星球,全面提升技术能力。
👉 加入方式,"长按 "或"扫描"下方二维码噢:

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。





go
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)