8.64.0 release (2025-10-22)
Total recipe count: 4942
info
This changelog only shows what recipes have been added, removed, or changed. OpenRewrite may do releases that do not include these types of changes. To see these changes, please go to the releases page.
Corresponding CLI version
- Stable CLI version
v3.49.0
- Staging CLI version:
v3.50.0
New Artifacts
- rewrite-toml
New Recipes
- io.moderne.java.spring.boot.FieldToConstructorInjection: Converts
@Autowired
field injection to constructor injection pattern. For non-final classes, adds both a no-args constructor and the autowired constructor to maintain compatibility with extending classes. Moves@Qualifier
annotations to constructor parameters. - io.moderne.java.spring.framework.beansxml.BeansXmlToConfiguration: Converts Java/Jakarta EE
beans.xml
configuration files to Spring Framework@Configuration
classes. - io.quarkus.updates.camel.camel415.CamelQuarkusMigrationRecipe: Migrates
camel 4.14
Quarkus application tocamel 4.15
. - org.apache.camel.upgrade.camel415.CamelMigrationRecipe: Migrates
camel 4.14
application tocamel 4.15
. - org.apache.camel.upgrade.camel415.aiNestedHeadersClasses: Changed types of camel AI nested headers classes.
- org.apache.camel.upgrade.camel415.dataFormats: Refactored dataFormats.
- org.apache.camel.upgrade.camel415.nettyAndNettyHttp: Changed parameter in camel-netty and camel-netty-http + enhanced value.
- org.apache.camel.upgrade.camel415.xmlDataFormats: Refactored dataFormats (XML DSL).
- org.apache.camel.upgrade.camel415.yamDataFormats: Refactored dataFormats (YAML DSL).
- org.apache.camel.upgrade.customRecipes.ReplacePropertyInComponentXml: Apache Camel XML DSL migration from version 4.9 o 4.10.
- org.apache.camel.upgrade.customRecipes.ReplacePropertyInComponentYaml: ARenames property of the component.
- org.apache.camel.upgrade.customRecipes.ReplacePropertyInDataFormatXml: Apache Camel XML DSL migration from version 4.9 o 4.10.
- org.apache.camel.upgrade.customRecipes.ReplacePropertyInDataFormatYaml: ARenames property of the component.
- org.openrewrite.featureflags.RemoveDoubleFlag: Replace method invocations for feature key with value, and simplify constant if branch execution.
- org.openrewrite.featureflags.RemoveIntegerFlag: Replace method invocations for feature key with value, and simplify constant if branch execution.
- org.openrewrite.featureflags.launchdarkly.RemoveDoubleVariation: Replace
doubleVariation
invocations for feature key with value, and simplify constant if branch execution. - org.openrewrite.featureflags.launchdarkly.RemoveIntVariation: Replace
intVariation
invocations for feature key with value, and simplify constant if branch execution. - org.openrewrite.featureflags.openfeature.RemoveGetDoubleValue: Replace
getDoubleValue()
invocations forfeatureKey
withreplacementValue
, and simplify constant if branch execution. - org.openrewrite.featureflags.openfeature.RemoveGetIntegerValue: Replace
getIntegerValue()
invocations forfeatureKey
withreplacementValue
, and simplify constant if branch execution. - org.openrewrite.featureflags.openfeature.RemoveGetStringValue: Replace
getStringValue()
invocations forfeatureKey
withreplacementValue
, and simplify constant if branch execution. - org.openrewrite.java.jackson.ReplaceStreamWriteCapability: In Jackson 3,
JsonGenerator.canWriteBinaryNatively()
andcanWriteFormattedNumbers()
were removed and replaced with theStreamWriteCapability
enum. This recipe updates these method calls to usegetWriteCapabilities().isEnabled(StreamWriteCapability.*)
instead. - org.openrewrite.java.migrate.guava.NoGuavaPredicatesAndOr: Prefer
Predicate.and(Predicate)
overPredicates.and(Predicate, Predicate)
. - org.openrewrite.java.search.HasMethod: Marks files that have at least one occurrence of a method matching a pattern.
- org.openrewrite.java.search.HasType: Marks files that have at least one occurrence of a type, even if the name of that type doesn't appear in the source code.
- org.openrewrite.java.spring.SeparateApplicationPropertiesByProfile: Separating
application.properties
into separate files based on profiles. - org.openrewrite.java.spring.security6.UpgradeSpringSecurity_6_5: Migrate applications to the latest Spring Security 6.5 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs, and migrate configuration settings that have changes between versions.
- org.openrewrite.java.testing.testcontainers.Testcontainers2ContainerClasses: Change Testcontainers container classes to their new package locations in Testcontainers 2.x.
- org.openrewrite.java.testing.testcontainers.Testcontainers2Dependencies: Change Testcontainers dependencies to adopt the new consistent
testcontainers-
prefix. - org.openrewrite.java.testing.testcontainers.Testcontainers2Migration: Change dependencies and types to migrate to testcontainers-java 2.x.
- org.openrewrite.maven.MigrateToMaven4: Migrates Maven POMs from Maven 3 to Maven 4, addressing breaking changes and deprecations. This recipe updates property expressions, lifecycle phases, removes duplicate plugin declarations, and replaces removed properties to ensure compatibility with Maven 4.
- org.openrewrite.maven.RemoveDuplicatePluginDeclarations: Maven 4 rejects duplicate plugin declarations (same groupId and artifactId) with an error. This recipe removes duplicate plugin declarations, keeping only the first occurrence.
- org.openrewrite.maven.ReplaceDeprecatedLifecyclePhases: Maven 4 deprecated all
pre-*
andpost-*
lifecycle phases in favor of thebefore:
andafter:
syntax. This recipe updates plugin phase declarations to use the new syntax, includingpre-clean
→before:clean
,pre-site
→before:site
,pre-integration-test
→before:integration-test
, and theirpost-*
equivalents. - org.openrewrite.maven.ReplaceModulesWithSubprojects: Maven 4 model version 4.1.0 deprecates the
<modules>
element in favor of<subprojects>
to eliminate confusion with Java's Platform Module System (JPMS). This recipe renames<modules>
to<subprojects>
and<module>
children to<subproject>
. - org.openrewrite.maven.ReplaceRemovedRootDirectoryProperties: Maven 4 removed support for deprecated root directory properties. This recipe replaces
${executionRootDirectory}
with${session.rootDirectory}
and${multiModuleProjectDirectory}
with${project.rootDirectory}
. - org.openrewrite.maven.UpgradeToModelVersion410: Upgrades Maven POMs from model version 4.0.0 to 4.1.0, enabling new Maven 4 features like
<subprojects>
,bom
packaging, and automatic version inference. This recipe updates the<modelVersion>
element,xmlns
namespace, andxsi:schemaLocation
from 4.0.0 to 4.1.0. - org.openrewrite.maven.UseParentInference: Maven 4.1.0 supports automatic parent version inference when using a relative path. This recipe simplifies parent declarations by using the shorthand
<parent/>
form when the parent is in the default location (..
), removing the explicit<relativePath>
,<groupId>
,<artifactId>
, and<version>
elements. Maven automatically infers these values from the parent POM. - org.openrewrite.toml.ChangeKey: Change a TOML key, while leaving the value intact.
- org.openrewrite.toml.ChangeTableRowValue: Change a value in a TOML table row when the identifying property matches the specified matcher.
- org.openrewrite.toml.ChangeValue: Change the value of a TOML key.
- org.openrewrite.toml.CreateTomlFile: Create a new TOML file.
- org.openrewrite.toml.DeleteKey: Delete a TOML key-value pair.
- org.openrewrite.toml.DeleteTable: Delete a TOML table.
- org.openrewrite.toml.DeleteTableRow: Delete a TOML table row when one of its values matches the specified matcher.
- org.openrewrite.toml.FindKey: Find TOML keys matching a path expression.
- org.openrewrite.toml.MergeTableRow: Merge a TOML row into an array table. If a row with the same identifying property exists, merge the values. Otherwise, insert a new row.
- org.openrewrite.toml.ReplaceTableRow: Replace a TOML table row with new content. If a row with the same identifying property exists, replace it entirely.
Removed Recipes
- io.moderne.java.spring.framework.webxml.DeleteEmptyWebXml: Deletes
web.xml
files that contain only an empty<web-app>
root element with no child elements. - org.openrewrite.spring.webxml.MigrateToJakartaEEServletConfiguration: Migrates
web.xml
content to Spring Boot Configuration classes using Jakarta EE namespace. - org.openrewrite.spring.webxml.MigrateToJavaXServletConfiguration: Migrates
web.xml
content to Spring Boot Configuration classes using Java EE javax namespace. - org.openrewrite.spring.webxml.RemoveWebXml: Migrates
web.xml
content to Spring Boot Configuration classes with respect to Java EE or Jakarta EE usage.
Changed Recipes
- org.openrewrite.maven.AddManagedDependency was changed:
- Old Options:
addToRootPom: { type: Boolean, required: false }
artifactId: { type: String, required: true }
classifier: { type: String, required: false }
groupId: { type: String, required: true }
onlyIfUsing: { type: String, required: false }
releasesOnly: { type: Boolean, required: false }
scope: { type: String, required: false }
type: { type: String, required: false }
version: { type: String, required: true }
versionPattern: { type: String, required: false }
- New Options:
addToRootPom: { type: Boolean, required: false }
artifactId: { type: String, required: true }
because: { type: String, required: false }
classifier: { type: String, required: false }
groupId: { type: String, required: true }
onlyIfUsing: { type: String, required: false }
releasesOnly: { type: Boolean, required: false }
scope: { type: String, required: false }
type: { type: String, required: false }
version: { type: String, required: true }
versionPattern: { type: String, required: false }
- Old Options:
- org.openrewrite.maven.UpgradeTransitiveDependencyVersion was changed:
- Old Options:
addToRootPom: { type: Boolean, required: false }
artifactId: { type: String, required: true }
classifier: { type: String, required: false }
groupId: { type: String, required: true }
onlyIfUsing: { type: String, required: false }
releasesOnly: { type: Boolean, required: false }
scope: { type: String, required: false }
type: { type: String, required: false }
version: { type: String, required: true }
versionPattern: { type: String, required: false }
- New Options:
addToRootPom: { type: Boolean, required: false }
artifactId: { type: String, required: true }
because: { type: String, required: false }
classifier: { type: String, required: false }
groupId: { type: String, required: true }
onlyIfUsing: { type: String, required: false }
releasesOnly: { type: Boolean, required: false }
scope: { type: String, required: false }
type: { type: String, required: false }
version: { type: String, required: true }
versionPattern: { type: String, required: false }
- Old Options: