Spring Modulith 2.0

When upgrading to Spring Modulith 2.0, refer to the Spring Modulith 2.0.0 Release Notes for newly introduced APIs, deprecated APIs, and breaking changes. Spring Modulith 2.0 is the release line for Spring Boot 4.0, and the Spring Boot 4.0 upgrade recipe chains this recipe.

The io.arconia.rewrite.spring.modulith2.UpgradeSpringModulith_2_0 recipe automates most of the changes introduced in Spring Modulith 2.0. You can use it to update your project to the latest Spring Modulith 2.0.x release.

The recipe will:

  • Upgrade all org.springframework.modulith dependencies to the 2.0.x release line.

  • Rename Spring Modulith configuration properties that were deprecated with a replacement: the event publication registry properties moved beneath spring.modulith.events, and the misspelled staleness check-interval and resubmission keys were corrected.

  • Replace the removed org.springframework.modulith.ApplicationModuleListener annotation with its successor in the org.springframework.modulith.events package.

See its entry in the Recipe Catalog for the full list of recipes this upgrade applies, each with its options and a before/after example.

Run the Recipe

You can apply this recipe with any OpenRewrite-compatible tool. The tabs below show three of them: the Arconia CLI, the OpenRewrite Gradle plugin, and the OpenRewrite Maven plugin. See Running Recipes for a comparison of when to pick each one.

  • Arconia CLI

  • Gradle

  • Maven

arconia rewrite run --recipe-name io.arconia.rewrite.spring.modulith2.UpgradeSpringModulith_2_0

First, create an init.gradle file in your project root with the following content.

initscript {
    repositories {
        gradlePluginPortal()
    }
    dependencies {
        classpath("org.openrewrite:plugin:latest.release")
    }
}

rootProject {
    plugins.apply(org.openrewrite.gradle.RewritePlugin)
    dependencies {
        rewrite("io.arconia.migrations:rewrite-spring:latest.release")
    }

    // Remove when project repositories are disabled
    afterEvaluate {
        if (repositories.isEmpty()) {
            repositories {
                mavenCentral()
            }
        }
    }

    configurations.named("rewrite") {
        canBeConsumed = false
    }
}

Then, run the following command.

./gradlew rewriteRun \
    --init-script init.gradle \
    --no-parallel \
    -DactiveRecipe=io.arconia.rewrite.spring.modulith2.UpgradeSpringModulith_2_0

You can remove the init.gradle file afterwards.

./mvnw -U org.openrewrite.maven:rewrite-maven-plugin:run \
  -Drewrite.recipeArtifactCoordinates=io.arconia.migrations:rewrite-spring:LATEST \
  -Drewrite.activeRecipes=io.arconia.rewrite.spring.modulith2.UpgradeSpringModulith_2_0