diff --git a/gradle/maven/defaults-maven.gradle b/gradle/maven/defaults-maven.gradle index ea20f908ad15..0e4ffe122fbc 100644 --- a/gradle/maven/defaults-maven.gradle +++ b/gradle/maven/defaults-maven.gradle @@ -179,6 +179,34 @@ configure(subprojects.findAll {it.path in rootProject.published}) {prj -> } } } + + // Resolve actual dependency versions for any entries with missing + // . This handles BOM-managed dependencies (e.g. Jackson) whose versions + // are resolved by Gradle but not written into the generated POM, which causes + // "missing version" errors for Maven consumers. + def resolvedVersions = [:] + ['compileClasspath', 'runtimeClasspath'].each { configName -> + def config = prj.configurations.findByName(configName) + if (config) { + config.resolvedConfiguration.resolvedArtifacts.each { artifact -> + def id = artifact.moduleVersion.id + def key = "${id.group}:${id.name}" + if (!resolvedVersions.containsKey(key)) { + resolvedVersions[key] = id.version + } + } + } + } + root.dependencies?.dependency?.each { dep -> + def versionNodes = dep.version + if (!versionNodes || !versionNodes.text()) { + def key = "${dep.groupId.text()}:${dep.artifactId.text()}" + def resolvedVersion = resolvedVersions[key] + if (resolvedVersion) { + dep.appendNode('version', resolvedVersion) + } + } + } } } }