Find Relocated Dependencies
To identify dependencies in your project that have been relocated to new group IDs or artifact IDs, you can use the OpenRewrite recipe org.openrewrite.java.dependencies.RelocatedDependencyCheck from rewrite-java-dependencies.
This recipe searches your project's dependencies for artifacts that have been moved to new Maven coordinates, helping you discover when libraries have changed their group ID or artifact ID. This is common when projects change ownership, restructure their modules, or move to new organizations. The recipe generates a data table showing all relocated dependencies found.
You can run the search recipe using one of the following methods.
- Moderne CLI
- Maven Command Line
- Maven POM
- Gradle init script
- Gradle
The Moderne CLI allows you to run OpenRewrite recipes on your project without needing to modify your build files, against serialized Lossless Semantic Tree (LST) of your project for a considerable performance boost & across projects.
You will need to have configured the Moderne CLI on your machine before you can run the following command.
- If project serialized Lossless Semantic Tree is not yet available locally, then build the LST. This is only needed the first time, or after extensive changes:
mod build ~/workspace/
- If the recipe is not available locally yet, then you can install it once using:
mod config recipes jar install org.openrewrite.recipe:rewrite-java-dependencies:LATEST
- Run the recipe.
mod run ~/workspace/ --recipe org.openrewrite.java.dependencies.RelocatedDependencyCheck
You will need to have Maven installed on your machine before you can run the following command.
mvn -U org.openrewrite.maven:rewrite-maven-plugin:run -Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-java-dependencies:RELEASE -Drewrite.activeRecipes=org.openrewrite.java.dependencies.RelocatedDependencyCheck -Drewrite.exportDatatables=true
You may add the plugin to your pom.xml file, so that it is available for all developers and CI/CD pipelines.
- Add the following to your
pom.xmlfile:
<project>
<build>
<plugins>
<plugin>
<groupId>org.openrewrite.maven</groupId>
<artifactId>rewrite-maven-plugin</artifactId>
<version>LATEST</version>
<configuration>
<exportDatatables>true</exportDatatables>
<activeRecipes>
<recipe>org.openrewrite.java.dependencies.RelocatedDependencyCheck</recipe>
</activeRecipes>
</configuration>
<dependencies>
<dependency>
<groupId>org.openrewrite.recipe</groupId>
<artifactId>rewrite-java-dependencies</artifactId>
<version>LATEST</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
- Run the recipe.
mvn rewrite:run
Gradle init scripts are a good way to try out a recipe without modifying your build.gradle file.
- Create a file named
init.gradlein the root of your project.
initscript {
repositories {
maven { url "https://plugins.gradle.org/m2" }
}
dependencies { classpath("org.openrewrite:plugin:latest.release") }
}
rootProject {
plugins.apply(org.openrewrite.gradle.RewritePlugin)
dependencies {
rewrite("org.openrewrite.recipe:rewrite-java-dependencies:latest.release")
}
rewrite {
activeRecipe("org.openrewrite.java.dependencies.RelocatedDependencyCheck")
setExportDatatables(true)
}
afterEvaluate {
if (repositories.isEmpty()) {
repositories {
mavenCentral()
}
}
}
}
- Run the recipe.
gradle --init-script init.gradle rewriteRun
You can add the plugin to your build.gradle file, so that it is available for all developers and CI/CD pipelines.
- Add the following to your
build.gradlefile:
plugins {
id("org.openrewrite.rewrite") version("latest.release")
}
rewrite {
activeRecipe("org.openrewrite.java.dependencies.RelocatedDependencyCheck")
setExportDatatables(true)
}
repositories {
mavenCentral()
}
dependencies {
rewrite("org.openrewrite.recipe:rewrite-java-dependencies:latest.release")
}
- Run
gradle rewriteRunto run the recipe.
Analyze the Results
After running the recipe, you will find a data table for RelocatedDependencyReport in the target/rewrite/datatables/ directory for Maven, or build for Gradle build, or in the output directory specified for the Moderne CLI.
You will also see relocated dependencies called out in the source code.