OpenRewrite

Recipes

Migrate to Java 17 | OpenRewrite Docs (opens in a new tab)

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-migrate-java:RELEASE \
-Drewrite.activeRecipes=org.openrewrite.java.migrate.UpgradeToJava17 \
-Drewrite.exportDatatables=true

Use local variable type inference | OpenRewrite Docs (opens in a new tab)

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-migrate-java:RELEASE \
-Drewrite.activeRecipes=org.openrewrite.java.migrate.lang.UseVar \
-Drewrite.exportDatatables=true

Code cleanup | OpenRewrite Docs (opens in a new tab)

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-static-analysis:RELEASE \
-Drewrite.activeRecipes=org.openrewrite.staticanalysis.CodeCleanup \
-Drewrite.exportDatatables=true

Common static analysis issues | OpenRewrite Docs (opens in a new tab)

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-static-analysis:RELEASE \
-Drewrite.activeRecipes=org.openrewrite.staticanalysis.CommonStaticAnalysis \
-Drewrite.exportDatatables=true

SLF4J best practices | OpenRewrite Docs (opens in a new tab)

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-logging-frameworks:RELEASE \
-Drewrite.activeRecipes=org.openrewrite.java.logging.slf4j.Slf4jBestPractices \
-Drewrite.exportDatatables=true

Lombok Best Practices | OpenRewrite Docs (opens in a new tab)

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-migrate-java:RELEASE \
-Drewrite.activeRecipes=org.openrewrite.java.migrate.lombok.LombokBestPractices \
-Drewrite.exportDatatables=true

AssertJ best practices | OpenRewrite Docs (opens in a new tab)

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-testing-frameworks:RELEASE \
-Drewrite.activeRecipes=org.openrewrite.java.testing.assertj.Assertj \
-Drewrite.exportDatatables=true

Replace String literals with HttpHeaders constants | OpenRewrite Docs (opens in a new tab)

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-spring:RELEASE \
-Drewrite.activeRecipes=org.openrewrite.java.spring.http.ReplaceStringLiteralsWithHttpHeadersConstants \
-Drewrite.exportDatatables=true

Replace String literals with MediaType constants | OpenRewrite Docs (opens in a new tab)

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-spring:RELEASE \
-Drewrite.activeRecipes=org.openrewrite.java.spring.http.ReplaceStringLiteralsWithMediaTypeConstants \
-Drewrite.exportDatatables=true

Remove @RequestMapping annotations | OpenRewrite Docs (opens in a new tab)

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-spring:RELEASE \
-Drewrite.activeRecipes=org.openrewrite.java.spring.NoRequestMappingAnnotation \
-Drewrite.exportDatatables=true

Use logger instead of printStackTrace() | OpenRewrite Docs (opens in a new tab)

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-logging-frameworks:RELEASE \
-Drewrite.activeRecipes=org.openrewrite.java.logging.PrintStackTraceToLogError \
-Drewrite.exportDatatables=true

Use logger instead of system print statements | OpenRewrite Docs (opens in a new tab)

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-logging-frameworks:RELEASE \
-Drewrite.activeRecipes=org.openrewrite.java.logging.SystemPrintToLogging \
-Drewrite.exportDatatables=true

Execution

  • Options

    • Gradle build script
    • Gradle init script
    • Maven POM
    • Maven CLI
    • Moderne CLI
  • Takeaway

    • Non invasive

      • Gradle init script and Maven CLI are preferred as they don't change existing build config.
    • Part of build lifecycle

      • Add the OpenRewrite config to existing Gradle build script or Maven POM.

Gradle init script

// init.gradle
initscript {
    repositories {
        maven { url "https://plugins.gradle.org/m2" }
    }
    dependencies { classpath("org.openrewrite:plugin:7.0.3") }
}
rootProject {
    plugins.apply(org.openrewrite.gradle.RewritePlugin)
    dependencies {
        rewrite("org.openrewrite.recipe:rewrite-logging-frameworks:3.0.0")
    }
    rewrite {
        activeRecipe("org.openrewrite.java.logging.slf4j.JulGetLoggerToLoggerFactoryRecipes")
        setExportDatatables(true)
    }
    afterEvaluate {
        if (repositories.isEmpty()) {
            repositories {
                mavenCentral()
            }
        }
    }
}
gradle --init-script init.gradle rewriteRun

Maven CLI

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
    -Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-docker:RELEASE \
    -Drewrite.activeRecipes=org.openrewrite.docker.search.FindDockerImageUses \
    -Drewrite.exportDatatables=true