33import groovy.util.Node
44import org.gradle.api.NamedDomainObjectCollection
55import org.gradle.api.Project
6+ import org.gradle.api.artifacts.Dependency
7+ import org.gradle.api.artifacts.ProjectDependency
68import org.gradle.api.plugins.ExtensionAware
79import org.gradle.api.plugins.ExtraPropertiesExtension
810import org.gradle.api.publish.PublishingExtension
911import org.gradle.api.publish.maven.MavenPublication
1012import org.gradle.api.tasks.SourceSet
1113import org.gradle.api.tasks.SourceSetContainer
14+ import org.gradle.configurationcache.extensions.capitalized
1215import org.gradle.jvm.tasks.Jar
1316import org.gradle.kotlin.dsl.withGroovyBuilder
1417import org.gradle.plugins.signing.SigningExtension
@@ -208,12 +211,17 @@ private fun MavenPublication.applyPublicationDetails(
208211 dependencies
209212 .mapValues { entry -> entry.value.filter { it.name != " unspecified" } }
210213 .forEach { (scope, dependencies) ->
211- dependencies.forEach {
214+ dependencies.forEach { dep ->
212215 with (dependenciesNode.appendNode(" dependency" )) {
213- appendNode(" groupId" , it.group)
214- appendNode(" artifactId" , it.name)
215- appendNode(" version" , it.version)
216- appendNode(" scope" , scope)
216+ if (dep is ProjectDependency ) {
217+ appendProjectDependencyCoordinates(dep)
218+ } else {
219+ appendExternalDependencyCoordinates(dep)
220+ }
221+
222+ // Rewrite scope definition for BOM dependencies
223+ val isBom = " -bom" in dep.name
224+ appendNode(" scope" , if (isBom) " import" else scope)
217225 }
218226 }
219227 }
@@ -223,6 +231,26 @@ private fun MavenPublication.applyPublicationDetails(
223231 }
224232}
225233
234+ private fun Node.appendProjectDependencyCoordinates (dep : ProjectDependency ) {
235+ // Find the external coordinates for the given project dependency
236+ val projectName = dep.name
237+
238+ val config = Artifacts .Instrumentation ::class .java
239+ .getMethod(" get${projectName.capitalized()} " )
240+ .invoke(Artifacts .Instrumentation )
241+ as Deployed
242+
243+ appendNode(" groupId" , config.groupId)
244+ appendNode(" artifactId" , config.artifactId)
245+ appendNode(" version" , config.latestStableVersion)
246+ }
247+
248+ private fun Node.appendExternalDependencyCoordinates (dep : Dependency ) {
249+ appendNode(" groupId" , dep.group)
250+ appendNode(" artifactId" , dep.name)
251+ dep.version?.let { appendNode(" version" , it) }
252+ }
253+
226254private fun MavenPublication.configurePom (deployConfig : Deployed ) = also {
227255 pom {
228256 // Name and description cannot be set directly through the property, since they somehow aren't applied
0 commit comments