欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 使用OpenRewrite将Java自动升级到Java 21

使用OpenRewrite将Java自动升级到Java 21

2025/5/19 14:33:15 来源:https://blog.csdn.net/oscar999/article/details/142933240  浏览:    关键词:使用OpenRewrite将Java自动升级到Java 21

使用 OpenRewrite 可以实现将Java 项目自动升级到Java 21语法。

基于Maven项目的实现步骤

步骤非常简单, 具体如下:

  1. 在pom.xml 中添加如下插件:
<project><build><plugins><plugin><groupId>org.openrewrite.maven</groupId><artifactId>rewrite-maven-plugin</artifactId><version>5.42.0</version><configuration><exportDatatables>true</exportDatatables><activeRecipes><recipe>org.openrewrite.java.migrate.UpgradeToJava21</recipe></activeRecipes></configuration><dependencies><dependency><groupId>org.openrewrite.recipe</groupId><artifactId>rewrite-migrate-java</artifactId><version>2.26.1</version></dependency></dependencies></plugin></plugins></build>
</project>
  1. 运行OpenRewrite 的Java升级的配方
mvn rewrite:run

运行示例

举例来看,Java 21 对于线程控制方法的写法做了升级:
以下是Java旧版的线程的写法:

    public void Java8Thread() {Thread thread = new Thread();thread.start();thread.suspend();thread.resume();thread.stop();}

在 JDK 21 中,不推荐使用Thread.suspend(),Thread.resume(), 和Thread.stop()方法,因为这些方法已经被废弃(deprecated)多年,并且存在严重的安全性和一致性问题。

升级前的代码:
在这里插入图片描述

升级后的代码:

在这里插入图片描述

OpenRewrite Java升级解密

上面示例的Java 升级到21是如何实现的呢?

其实是OpenWrite 提供的下面配方(Recipe):

  • groupId: org.openrewrite.recipe
  • artifactId: rewrite-migrate-java
  • version: 2.26.1

该配方可以在Maven 的中央库获取: https://central.sonatype.com/artifact/org.openrewrite.recipe/rewrite-migrate-java/2.26.1/jar

这个配方也是有很多子配方组成的, 具体包括:

  • 迁移到Java 17
  • 将内部版本升级到Java 21
  • 删除非法分号
  • 将Thread.resumme()、Thread.stop()和Thread.suped()替换为抛出新的UnsupportedOperationException()
  • URLConstructorsToURI
  • 采用 SequencedCollection
  • 使用Locale.of(…) 替换 new Locale(…)
  • 替换已弃用的Runtime#exec()方法
  • 升级操作/设置java java版本
  • 将插件升级到Java 21兼容版本
  • 避免在java.desktop中使用已弃用的空finalize()方法
  • 采用javax.security.auth。Subject.current()和javax.security.auth。Subject.callAs()方法`

其实这些配方的组合也不一定是完全的, 如何发现有一些没有覆盖的,也可以到GitHub获取该配方的源码之后进行改进,GitHub的地址是: https://github.com/openrewrite/rewrite-migrate-java/blob/main/src/main/resources/META-INF/rewrite/java-version-21.yml

本篇完整代码地址:

  • https://github.com/osxm/ai_ency/tree/main/openrewrite-demo


版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词