如何使用Java 25编译器Java 17项目代码?
摘要:Java25发布了,比24更好用 😄 我大部分的项目是Java17的,该如何用25支持编写和编译呢? 一、指定编译版本 用SDKman 下载一个25的JDK,IDEA会自动识别出来。直接指明就行 二、升级Lo
Java25发布了,比24更好用 😄
我大部分的项目是Java17的,该如何用25支持编写和编译呢?
一、指定编译版本
用SDKman 下载一个25的JDK,IDEA会自动识别出来。直接指明就行
二、升级Lombok版本
25支持的lombok版本比较新,尽量用最新的,我用的是
<lombok.version>1.18.42</lombok.version>
三、指明编译插件
只升级了Lombok版本还不够,还要明确使用
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.14.1</version>
<configuration>
<release>17</release>
<!-- 不要使用 source和target,而是用release标签 -->
<annotationProcessors>
<annotationProcessor>lombok.launch.AnnotationProcessorHider$AnnotationProcessor</annotationProcessor>
</annotationProcessors>
</configuration>
</plugin>
这样就能编译正常了,又快又好!
Java 25(JDK 25)是下一个长期支持版本(LTS),相对于 Java 17 有不少新特性和改进。
特性
概述 / 用处
是否成熟 / 风险
备注
Flexible Constructor Bodies(JEP 513)
允许在 super(...) 或 this(...) 调用之前执行代码,只要不读取未初始化字段。这样就可以在构造器里先做校验、预计算逻辑而不用绕开限制。
✅ 已成为正式特性
对复杂继承关系中的构造逻辑更灵活
Compact Source Files & Instance Main Methods(JEP 512)
对于小型脚本、原型或入门程序,可以省略传统的类声明和静态 main 方法写法。可以写一个“隐式类”,void main()(非 static)也可以被当作程序入口用。
✅ 正式特性
更方便快速试验、演示、小工具写法
Module Import Declarations(JEP 511)
在源代码里可以写 import module …; 来导入模块,使得使用模块系统时依赖关系更显式。
✅ 正式特性
对用到 Java 平台模块系统 (JPMS) 的项目更友好
Scoped Values(JEP 506)
一种比 ThreadLocal 更现代、适应虚拟线程场景的机制,用于在一段执行上下文中共享不可变数据。
