1*57b5a4a6SAndroid Build Coastguard Worker/* 2*57b5a4a6SAndroid 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*57b5a4a6SAndroid Build Coastguard Worker */ 4*57b5a4a6SAndroid Build Coastguard Worker 5*57b5a4a6SAndroid Build Coastguard Worker 6*57b5a4a6SAndroid Build Coastguard Worker/** 7*57b5a4a6SAndroid Build Coastguard Worker * Publish the platform JAR and POM so that consumers who depend on this module and can't read Gradle module 8*57b5a4a6SAndroid Build Coastguard Worker * metadata can still get the platform artifact and transitive dependencies from the POM 9*57b5a4a6SAndroid Build Coastguard Worker * (see details in https://youtrack.jetbrains.com/issue/KT-39184#focus=streamItem-27-4115233.0-0) 10*57b5a4a6SAndroid Build Coastguard Worker */ 11*57b5a4a6SAndroid Build Coastguard Workerproject.ext.publishPlatformArtifactsInRootModule = { MavenPublication platformPublication -> 12*57b5a4a6SAndroid Build Coastguard Worker afterEvaluate { 13*57b5a4a6SAndroid Build Coastguard Worker XmlProvider platformXml = null 14*57b5a4a6SAndroid Build Coastguard Worker 15*57b5a4a6SAndroid Build Coastguard Worker platformPublication.pom.withXml { platformXml = it } 16*57b5a4a6SAndroid Build Coastguard Worker 17*57b5a4a6SAndroid Build Coastguard Worker publishing.publications.kotlinMultiplatform { 18*57b5a4a6SAndroid Build Coastguard Worker pom.withXml { 19*57b5a4a6SAndroid Build Coastguard Worker Node root = asNode() 20*57b5a4a6SAndroid Build Coastguard Worker // Remove the original content and add the content from the platform POM: 21*57b5a4a6SAndroid Build Coastguard Worker root.children().toList().each { root.remove(it as Node) } 22*57b5a4a6SAndroid Build Coastguard Worker platformXml.asNode().children().each { root.append(it as Node) } 23*57b5a4a6SAndroid Build Coastguard Worker 24*57b5a4a6SAndroid Build Coastguard Worker // Adjust the self artifact ID, as it should match the root module's coordinates: 25*57b5a4a6SAndroid Build Coastguard Worker ((root.get("artifactId") as NodeList).get(0) as Node).setValue(artifactId) 26*57b5a4a6SAndroid Build Coastguard Worker 27*57b5a4a6SAndroid Build Coastguard Worker // Set packaging to POM to indicate that there's no artifact: 28*57b5a4a6SAndroid Build Coastguard Worker root.appendNode("packaging", "pom") 29*57b5a4a6SAndroid Build Coastguard Worker 30*57b5a4a6SAndroid Build Coastguard Worker // Remove the original platform dependencies and add a single dependency on the platform module: 31*57b5a4a6SAndroid Build Coastguard Worker Node dependencies = (root.get("dependencies") as NodeList).get(0) as Node 32*57b5a4a6SAndroid Build Coastguard Worker dependencies.children().toList().each { dependencies.remove(it as Node) } 33*57b5a4a6SAndroid Build Coastguard Worker Node singleDependency = dependencies.appendNode("dependency") 34*57b5a4a6SAndroid Build Coastguard Worker singleDependency.appendNode("groupId", platformPublication.groupId) 35*57b5a4a6SAndroid Build Coastguard Worker singleDependency.appendNode("artifactId", platformPublication.artifactId) 36*57b5a4a6SAndroid Build Coastguard Worker singleDependency.appendNode("version", platformPublication.version) 37*57b5a4a6SAndroid Build Coastguard Worker singleDependency.appendNode("scope", "compile") 38*57b5a4a6SAndroid Build Coastguard Worker } 39*57b5a4a6SAndroid Build Coastguard Worker } 40*57b5a4a6SAndroid Build Coastguard Worker 41*57b5a4a6SAndroid Build Coastguard Worker tasks.matching { it.name == "generatePomFileForKotlinMultiplatformPublication"}.configureEach { 42*57b5a4a6SAndroid Build Coastguard Worker dependsOn(tasks["generatePomFileFor${platformPublication.name.capitalize()}Publication"]) 43*57b5a4a6SAndroid Build Coastguard Worker } 44*57b5a4a6SAndroid Build Coastguard Worker } 45*57b5a4a6SAndroid Build Coastguard Worker}