From 51279a8195f154c0798158b9d02a54c0cdae6e2d Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Thu, 14 Feb 2019 18:33:49 +0300 Subject: [PATCH] Add a switch that disables dependencies rewriting in POMs This covers the cases when a user knows what they do and doesn't want anything to do any changes to the POMs, e.g. they want to manually replace all of the dependencies, so they need the original dependencies. --- .../kotlin/gradle/NewMultiplatformIT.kt | 37 +++++++++++++++++-- .../kotlin/gradle/plugin/KotlinProperties.kt | 4 +- .../plugin/mpp/KotlinMultiplatformPlugin.kt | 5 ++- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt index d96b8eaf446..dc5b9558885 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.konan.target.HostManager import org.junit.Assert import org.junit.Test +import java.io.File import java.lang.StringBuilder import java.util.jar.JarFile import java.util.zip.ZipFile @@ -1272,8 +1273,6 @@ class NewMultiplatformIT : BaseGradleIT() { "42" ) if (withMetadata) { - // Check that the external dependency that was resolved with metadata is written to the POM as the artifactId it - // resolved to: assertFileContains( "repo/com/exampleapp/sample-app-jvm8/1.0/sample-app-jvm8-1.0.pom", "com.external.dependency", @@ -1287,7 +1286,39 @@ class NewMultiplatformIT : BaseGradleIT() { assertTrue { "\"group\":\"com.example\",\"module\":\"sample-lib-multiplatform\"" in moduleMetadata } assertTrue { "\"group\":\"com.external.dependency\",\"module\":\"external\"" in moduleMetadata } } - assertFileExists("repo/foo/bar/42/bar-42.jar") + } + + // Check that a user can disable rewriting of MPP dependencies in the POMs: + build("publish", "-Pkotlin.mpp.keepMppDependenciesIntactInPoms=true") { + assertSuccessful() + assertFileContains( + "repo/com/exampleapp/sample-app-nodejs/1.0/sample-app-nodejs-1.0.pom", + "com.example", + if (withMetadata) + "sample-lib-multiplatform" + else + "sample-lib" + , + "1.0" + ) + assertFileContains( + "repo/com/exampleapp/sample-app-jvm8/1.0/sample-app-jvm8-1.0.pom", + "com.example", + if (withMetadata) + "sample-lib-multiplatform" + else + "sample-lib" + , + "1.0" + ) + if (withMetadata) { + assertFileContains( + "repo/com/exampleapp/sample-app-jvm8/1.0/sample-app-jvm8-1.0.pom", + "com.external.dependency", + "external", + "1.2.3" + ) + } } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt index 66f851d0c8e..890e60f0e1a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.gradle.plugin import org.gradle.api.Project import org.jetbrains.kotlin.gradle.dsl.Coroutines -import org.jetbrains.kotlin.gradle.report.BuildReportMode import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -80,6 +79,9 @@ internal class PropertiesProvider(private val project: Project) { val useFallbackCompilerSearch: Boolean? get() = booleanProperty("kotlin.useFallbackCompilerSearch") + val keepMppDependenciesIntactInPoms: Boolean? + get() = booleanProperty("kotlin.mpp.keepMppDependenciesIntactInPoms") + /** * Enables parallel tasks execution within a project with Workers API. * Does not enable using actual worker proccesses diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt index e5ec3efd0c6..8776190c9ec 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt @@ -205,7 +205,10 @@ class KotlinMultiplatformPlugin( (this as MavenPublicationInternal).publishWithOriginalFileName() artifactId = variant.defaultArtifactId - pom.withXml { xml -> project.rewritePomMppDependenciesToActualTargetModules(xml, variant) } + pom.withXml { xml -> + if (PropertiesProvider(project).keepMppDependenciesIntactInPoms != true) + project.rewritePomMppDependenciesToActualTargetModules(xml, variant) + } } (variant as? KotlinTargetComponentWithPublication)?.publicationDelegate = variantPublication