code-reviewer
Use when asked to review, check or diagnose Spring Boot code: a pull request, diff, module or file before it merges; a slow…
Moves a Java class or package to another package in this project with OpenRewrite, so every import, fully qualified reference, Javadoc link, properties value and META-INF/services entry follows, the same way each time. Use when the user asks to move, relocate or repackage a
Claude Code
$ npx -y skills add a-pavithraa/springboot-skills-marketplace --skill move-code --agent claude-code
Codex
$ npx skills add a-pavithraa/springboot-skills-marketplace --skill move-code -a codex -y
Cursor
$ npx skills add a-pavithraa/springboot-skills-marketplace --skill move-code -a cursor -y
Gemini CLI
$ npx skills add a-pavithraa/springboot-skills-marketplace --skill move-code -a gemini-cli -y
GitHub Copilot
$ npx skills add a-pavithraa/springboot-skills-marketplace --skill move-code -a github-copilot -y
OpenCode
$ npx skills add a-pavithraa/springboot-skills-marketplace --skill move-code -a opencode -y
Windsurf
$ npx skills add a-pavithraa/springboot-skills-marketplace --skill move-code -a windsurf -y
name: move-code description: Moves a Java class or package to another package in this project with OpenRewrite, so every import, fully qualified reference, Javadoc link, properties value and META-INF/services entry follows, the same way each time. Use when the user asks to move, relocate or repackage a class or package, or to rename a package, to restructure code into modules, or when a fix would mean moving a type across modules.
Don't move Java files by hand or with text edits: imports and references in other files go stale, and names in resources are missed.
1. Decide whether a move is the fix. To clear a module-boundary violation, prefer a facade in the target module's top-level package or an event; moving an internal type into a module's top-level package publishes it to every module. A move fits when the type belongs to another module, or when restructuring into modules. 2. Write the recipe to a file in a temporary folder outside the repository, here `$TMPDIR/move.yml`, so nothing is left to commit:
type: specs.openrewrite.org/v1beta/recipe
name: local.Move
recipeList:
- org.openrewrite.java.ChangeType: # one class
oldFullyQualifiedTypeName: {{BASE_PACKAGE}}.orders.internal.Discounts
newFullyQualifiedTypeName: {{BASE_PACKAGE}}.catalog.internal.Discounts
# or, for a whole package and its subpackages:
# - org.openrewrite.java.ChangePackage:
# oldPackageName: {{BASE_PACKAGE}}.orders.internal
# newPackageName: {{BASE_PACKAGE}}.orders.pricing
# recursive: true<!-- maven:begin --> 3. Preview, and read the patch in `target/rewrite/rewrite.patch` before applying it:
./mvnw -q org.openrewrite.maven:rewrite-maven-plugin:6.46.1:dryRun -Drewrite.configLocation=$TMPDIR/move.yml -Drewrite.activeRecipes=local.Move
4. Apply it with the same command and goal `run` instead of `dryRun`. <!-- maven:end --> <!-- gradle:begin --> 3. Write an init script next to the recipe, `$TMPDIR/rewrite.gradle`, so the build files stay unchanged:
initscript {
repositories { gradlePluginPortal(); mavenCentral() }
dependencies { classpath "org.openrewrite:plugin:7.39.0" }
}
rootProject {
plugins.apply(org.openrewrite.gradle.RewritePlugin)
rewrite {
activeRecipe("local.Move")
configFile = new File(System.getProperty("moveRecipe"))
}
}Preview, and read the patch in `build/reports/rewrite/rewrite.patch` before applying it:
./gradlew -q rewriteDryRun --init-script $TMPDIR/rewrite.gradle -DmoveRecipe=$TMPDIR/move.yml
4. Apply it with the same command and task `rewriteRun` instead of `rewriteDryRun`. <!-- gradle:end --> 5. Find what the recipe can't see: `git grep -n '<old fully qualified name>'`. A class name inside a Java string literal is not updated. Change each hit only if it names the moved type. 6. Run `{{VERIFY}}`. A compile error naming a type from the old package means the moved class used package-private code there: move that code with it (move the whole package instead), or make it reachable on purpose. The module-boundary test reports a move that crosses a module boundary. 7. Commit the move on its own, with no other edits, so the review is mechanical and `git log --follow` keeps the file's history.
Claude Code and Codex skills for Spring Boot 4 and Java 25. The main one, spring-boot-team-harness, gives every developer on a team the same agent setup and makes ./mvnw verify (or ./gradlew build) fail on the mistakes agents make.
Use when asked to review, check or diagnose Spring Boot code: a pull request, diff, module or file before it merges; a slow…
Use when starting a new Spring Boot project or service: scaffolding or bootstrapping a backend, REST API, microservice or modular…
Use when a team wants every developer's coding agent (Claude Code or Codex) to follow the same rules and coding conventions on a…
Adds a new application module to this Spring Modulith project with the package layout the ModuleBoundariesTests gate expects, and…
Writes a Flyway database migration for this project following the team's rules for naming, editing and renaming, so migrations…
Use when upgrading an existing Spring Boot application, for example from Boot 3.x to Boot 4 or to the latest Spring Boot and…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.