-
Notifications
You must be signed in to change notification settings - Fork 41.8k
Description
Java Migration: Java8toJava11
While this project already compiles against Java 25, it's impressive—though not surprising—that it still relies on Java 8 APIs, coding styles, and best practices.
What worked back then has evolved: the Java language and its APIs have introduced new features, idioms, and improvements.
To help align our codebase with modern Java conventions at scale, we've integrated automated migration rules into Checkstyle and Spotless.
- Checkstyle migration issue:
- Spotless rewrite configuration:
Should Spring follow suit?
If we aim to keep our Spring stack modern and aligned with the latest Java best practices, we could consider leveraging tools like OpenRewrite to automate migration to newer JDK versions.
For example, OpenRewrite provides recipes for upgrading to Java 21—and beyond—while applying current idiomatic patterns:
- OpenRewrite: Upgrade to Java 21: https://docs.openrewrite.org/recipes/java/migrate/upgradetojava21
This could help ensure our Spring components stay clean, performant, and consistent with evolving Java platform standards.
example:
There were problems parsing buildSrc/SpringRepositorySupport.groovy
All sources parsed, running active recipes: org.springframework.boot.openrewrite.SanityCheck
Changes have been made to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveIntegrationTests.java by:
org.openrewrite.java.migrate.UpgradeToJava21
org.openrewrite.java.migrate.UpgradeToJava17
org.openrewrite.java.migrate.Java8toJava11
org.openrewrite.java.migrate.nio.file.PathsGetToPathOf
org.openrewrite.java.ChangeMethodTargetToStatic: {methodPattern=java.nio.file.Paths get(..), fullyQualifiedTargetTypeName=java.nio.file.Path}
full scope:
All sources parsed, running active recipes: org.springframework.boot.openrewrite.SanityCheck
Changes have been made to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/AbstractBootArchiveIntegrationTests.java by:
org.openrewrite.java.migrate.UpgradeToJava21
org.openrewrite.java.migrate.UpgradeToJava17
org.openrewrite.java.migrate.Java8toJava11
org.openrewrite.java.migrate.nio.file.PathsGetToPathOf
org.openrewrite.java.ChangeMethodTargetToStatic: {methodPattern=java.nio.file.Paths get(..), fullyQualifiedTargetTypeName=java.nio.file.Path}
org.openrewrite.java.ChangeMethodName: {methodPattern=java.nio.file.Path get(..), newMethodName=of}
org.openrewrite.java.migrate.UpgradeBuildToJava21
org.openrewrite.java.migrate.UpgradeJavaVersion: {version=21}
Changes have been made to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/PomCondition.java by:
org.openrewrite.java.migrate.UpgradeToJava21
org.openrewrite.java.migrate.UpgradeToJava17
org.openrewrite.java.migrate.lang.StringFormatted: {addParentheses=false}
org.openrewrite.java.migrate.UpgradeBuildToJava21
org.openrewrite.java.migrate.UpgradeJavaVersion: {version=21}
Changes have been made to build-plugin/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/MavenPublishingIntegrationTests.java by:
org.openrewrite.java.migrate.UpgradeToJava21
org.openrewrite.java.migrate.UpgradeToJava17
org.openrewrite.java.migrate.lang.StringFormatted: {addParentheses=false}
org.openrewrite.java.migrate.UpgradeBuildToJava21
org.openrewrite.java.migrate.UpgradeJavaVersion: {version=21}
Changes have been made to build-plugin/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/SpringBootAotPluginIntegrationTests-applyingAotPluginDoesNotPreventConfigurationOfJavaToolchainLanguageVersion.gradle by:
org.openrewrite.java.migrate.UpgradeToJava21
org.openrewrite.java.migrate.UpgradeBuildToJava21
org.openrewrite.java.migrate.UpgradeJavaVersion: {version=21}
org.openrewrite.gradle.UpdateJavaCompatibility: {version=21, allowDowngrade=false}
Changes have been made to build-plugin/spring-boot-gradle-plugin/src/dockerTest/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.java by:
org.openrewrite.java.migrate.UpgradeToJava21
org.openrewrite.java.migrate.UpgradeToJava17
org.openrewrite.java.migrate.Java8toJava11
org.openrewrite.java.migrate.nio.file.PathsGetToPathOf
org.openrewrite.java.ChangeMethodTargetToStatic: {methodPattern=java.nio.file.Paths get(..), fullyQualifiedTargetTypeName=java.nio.file.Path}
org.openrewrite.java.ChangeMethodName: {methodPattern=java.nio.file.Path get(..), newMethodName=of}
org.openrewrite.java.migrate.UpgradeBuildToJava21
org.openrewrite.java.migrate.UpgradeJavaVersion: {version=21}
Changes have been made to build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ClassPath.java by:
org.openrewrite.java.migrate.UpgradeToJava21
org.openrewrite.java.migrate.UpgradeToJava17
org.openrewrite.java.migrate.Java8toJava11
org.openrewrite.java.migrate.nio.file.PathsGetToPathOf
org.openrewrite.java.ChangeMethodTargetToStatic: {methodPattern=java.nio.file.Paths get(..), fullyQualifiedTargetTypeName=java.nio.file.Path}
org.openrewrite.java.ChangeMethodName: {methodPattern=java.nio.file.Path get(..), newMethodName=of}
...