@@ -20,6 +20,7 @@ import groovy.util.Node
2020import groovy.util.NodeList
2121import org.gradle.api.Plugin
2222import org.gradle.api.Project
23+ import org.gradle.api.artifacts.component.ModuleComponentSelector
2324import org.gradle.api.artifacts.result.ResolvedComponentResult
2425import org.gradle.api.provider.Provider
2526import org.gradle.api.publish.PublishingExtension
@@ -58,25 +59,30 @@ public class OptionalDependenciesPlugin : Plugin<Project> {
5859 }
5960
6061 private fun Project.configurePom (
61- optionalDependencies : Provider <ResolvedComponentResult >
62+ resolvedOptionalDependencies : Provider <ResolvedComponentResult >
6263 ) = extensions.configure<PublishingExtension > {
6364 publications.withType<MavenPublication >().configureEach {
6465 pom.withXml {
65- val dependencies = (asNode()
66- .get(" dependencies" ) as NodeList )
67- .first() as Node
68- optionalDependencies
69- .get()
70- .dependencies
71- .forEach { optionalDependency ->
72- val (groupId, artifactId, version) = optionalDependency.requested.displayName.split(' :' )
73- dependencies.appendNode(" dependency" ).run {
74- appendNode(" groupId" , groupId)
75- appendNode(" artifactId" , artifactId)
76- appendNode(" version" , version)
77- appendNode(" optional" , true )
78- }
66+ val optionalDependencies = resolvedOptionalDependencies.get().dependencies
67+ if (optionalDependencies.isEmpty()) {
68+ return @withXml
69+ }
70+ val root = asNode()
71+ val dependencies = (root.get(" dependencies" ) as NodeList ).firstOrNull() as Node ?
72+ ? : root.appendNode(" dependencies" )
73+ for (optionalDependency in optionalDependencies) {
74+ val componentSelector = optionalDependency.requested
75+ check(componentSelector is ModuleComponentSelector ) {
76+ " Optional dependency '${componentSelector.displayName} ' is not a module dependency. " +
77+ " Only external module dependencies are supported."
7978 }
79+ dependencies.appendNode(" dependency" ).run {
80+ appendNode(" groupId" , componentSelector.group)
81+ appendNode(" artifactId" , componentSelector.module)
82+ appendNode(" version" , componentSelector.version)
83+ appendNode(" optional" , true )
84+ }
85+ }
8086 }
8187 }
8288 }
0 commit comments