BOM Migration — Gradle Projects (No Version Catalogs)
Python availability: The script below requires Python 3.8+. If
python3 --version(orpython --version) fails, skip the script section and follow Manual Fallback (no Python) instead.
Automated (Python available)
Run the upgrade_bom.py script located at references/languages/java/scripts/upgrade_bom.py (relative to this skill). It auto-detects Gradle and performs:
- Set/upgrade the BOM — adds
enforcedPlatform("com.azure:azure-sdk-bom:...")if missing, or upgrades the version. - Remove redundant explicit versions — strips inline version strings from Azure dependencies managed by the BOM.
The following invocation works identically in bash and PowerShell:
# Path is relative to the skill directory (plugin/skills/azure-upgrade/)
python3 ./references/languages/java/scripts/upgrade_bom.py <project_dir> <bom_version>Options:
--gradle <cmd>— override the Gradle command (default: auto-detectsgradleworgradle).
Under the hood (OpenRewrite recipes):
- Add BOM:
AddPlatformDependency(docs) - Upgrade BOM:
UpgradeDependencyVersion(docs) - Remove redundant versions:
RemoveRedundantDependencyVersions(docs)
⚠️ Warning: The script does not support Gradle version catalogs — neither TOML files nor programmatic
settings.gradlecatalogs. If the project uses either, follow TOML catalog steps or programmatic catalog steps instead.
Expected build.gradle after migration
Groovy DSL (build.gradle):
dependencies {
implementation enforcedPlatform("com.azure:azure-sdk-bom:{bom_version}")
implementation "com.azure:azure-identity"
implementation "com.azure.resourcemanager:azure-resourcemanager"
}Kotlin DSL (build.gradle.kts):
dependencies {
implementation(enforcedPlatform("com.azure:azure-sdk-bom:{bom_version}"))
implementation("com.azure:azure-identity")
implementation("com.azure.resourcemanager:azure-resourcemanager")
}Manual Fallback (no Python)
When Python is unavailable, edit build.gradle (or build.gradle.kts) directly. Apply the same two steps as the script.
Step 1 — Add or upgrade the BOM platform
Inside the dependencies { } block, add or update the enforcedPlatform line for azure-sdk-bom:
Groovy DSL:
dependencies {
implementation enforcedPlatform("com.azure:azure-sdk-bom:{bom_version}")
// ...other dependencies...
}Kotlin DSL:
dependencies {
implementation(enforcedPlatform("com.azure:azure-sdk-bom:{bom_version}"))
// ...other dependencies...
}- If the line exists: update only the version to
{bom_version}. - If the line is missing: insert it at the top of the
dependenciesblock. - Use the same configuration (
implementation,api,compileOnly, etc.) the project already uses for Azure deps. Repeat the platform line per configuration if needed. - Multi-project build: add the platform line in every subproject that declares Azure dependencies, or apply it once via a shared
subprojects { }/ convention plugin.
Step 2 — Remove redundant explicit versions
For every Azure dependency whose group starts with com.azure and is managed by the BOM (verify against https://repo1.maven.org/maven2/com/azure/azure-sdk-bom/{bom_version}/azure-sdk-bom-{bom_version}.pom), strip the version coordinate.
Groovy DSL — string notation:
// Before
implementation "com.azure:azure-identity:1.13.0"
// After
implementation "com.azure:azure-identity"Groovy DSL — map notation:
// Before
implementation group: "com.azure", name: "azure-identity", version: "1.13.0"
// After
implementation group: "com.azure", name: "azure-identity"Kotlin DSL:
// Before
implementation("com.azure:azure-identity:1.13.0")
// After
implementation("com.azure:azure-identity")Do not strip versions from artifacts that are not managed by the BOM.
Step 3 — Verify
Run the Gradle wrapper to inspect the resolved classpath. Use the form appropriate for your shell:
# bash / macOS / Linux
./gradlew dependencies --configuration runtimeClasspath# PowerShell on Windows
.\gradlew.bat dependencies --configuration runtimeClasspathThen confirm:
- The platform
com.azure:azure-sdk-bom:{bom_version}appears. - All BOM-managed Azure artifacts resolve to versions sourced from the BOM.
Then continue with the validation checklist in bom-validation.md.