xref: /aosp_15_r20/external/kotlinx.atomicfu/gradle/publish-mpp-root-module-in-platform.gradle (revision 68017707106cb9da9fed635c150bc497c09c160f)
1*68017707SAndroid Build Coastguard Worker/*
2*68017707SAndroid Build Coastguard Worker * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
3*68017707SAndroid Build Coastguard Worker */
4*68017707SAndroid Build Coastguard Worker
5*68017707SAndroid Build Coastguard Worker
6*68017707SAndroid Build Coastguard Worker/** Publish the platform JAR and POM so that consumers who depend on this module and can't read Gradle module
7*68017707SAndroid Build Coastguard Worker   metadata can still get the platform artifact and transitive dependencies from the POM: */
8*68017707SAndroid Build Coastguard Workerproject.ext.publishPlatformArtifactsInRootModule = { MavenPublication platformPublication ->
9*68017707SAndroid Build Coastguard Worker    afterEvaluate {
10*68017707SAndroid Build Coastguard Worker        XmlProvider platformXml = null
11*68017707SAndroid Build Coastguard Worker
12*68017707SAndroid Build Coastguard Worker        platformPublication.pom.withXml { platformXml = it }
13*68017707SAndroid Build Coastguard Worker
14*68017707SAndroid Build Coastguard Worker        publishing.publications.kotlinMultiplatform {
15*68017707SAndroid Build Coastguard Worker            pom.withXml {
16*68017707SAndroid Build Coastguard Worker                Node root = asNode()
17*68017707SAndroid Build Coastguard Worker                // Remove the original content and add the content from the platform POM:
18*68017707SAndroid Build Coastguard Worker                root.children().toList().each { root.remove(it as Node) }
19*68017707SAndroid Build Coastguard Worker                platformXml.asNode().children().each { root.append(it as Node) }
20*68017707SAndroid Build Coastguard Worker
21*68017707SAndroid Build Coastguard Worker                // Adjust the self artifact ID, as it should match the root module's coordinates:
22*68017707SAndroid Build Coastguard Worker                ((root.get("artifactId") as NodeList).get(0) as Node).setValue(artifactId)
23*68017707SAndroid Build Coastguard Worker
24*68017707SAndroid Build Coastguard Worker                // Set packaging to POM to indicate that there's no artifact:
25*68017707SAndroid Build Coastguard Worker                root.appendNode("packaging", "pom")
26*68017707SAndroid Build Coastguard Worker
27*68017707SAndroid Build Coastguard Worker                // Remove the original platform dependencies and add a single dependency on the platform module:
28*68017707SAndroid Build Coastguard Worker                Node dependencies = (root.get("dependencies") as NodeList).get(0) as Node
29*68017707SAndroid Build Coastguard Worker                dependencies.children().toList().each { dependencies.remove(it as Node) }
30*68017707SAndroid Build Coastguard Worker                Node singleDependency = dependencies.appendNode("dependency")
31*68017707SAndroid Build Coastguard Worker                singleDependency.appendNode("groupId", platformPublication.groupId)
32*68017707SAndroid Build Coastguard Worker                singleDependency.appendNode("artifactId", platformPublication.artifactId)
33*68017707SAndroid Build Coastguard Worker                singleDependency.appendNode("version", platformPublication.version)
34*68017707SAndroid Build Coastguard Worker                singleDependency.appendNode("scope", "compile")
35*68017707SAndroid Build Coastguard Worker            }
36*68017707SAndroid Build Coastguard Worker        }
37*68017707SAndroid Build Coastguard Worker
38*68017707SAndroid Build Coastguard Worker        tasks.matching { it.name == "generatePomFileForKotlinMultiplatformPublication"}.configureEach {
39*68017707SAndroid Build Coastguard Worker            dependsOn(tasks["generatePomFileFor${platformPublication.name.capitalize()}Publication"])
40*68017707SAndroid Build Coastguard Worker        }
41*68017707SAndroid Build Coastguard Worker    }
42*68017707SAndroid Build Coastguard Worker}