如何使用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 更现代、适应虚拟线程场景的机制,用于在一段执行上下文中共享不可变数据。
阅读全文