From d13ca3829626ba32fc6665b5c097efdb964b2e3b Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Tue, 14 Aug 2018 19:50:01 +0300 Subject: [PATCH] Relax some restrictions on Gradle dependency configurations in new MPP * Set canBeConsumed = false only on those configurations that have this flag according to the Gradle Java plugins. This saves us from breaking existing build scripts but introduces ambiguity between consumable configurations (e.g. between `apiElements`, `compile`, `runtime`). See the solution in the next point. * Don't set the Kotlin platform attribute on configurations that are not meant for consuming in other projects or resolving directly. This change hides these configurations from Gradle's variant aware dependency resolution and therefore prevents ambiguity (cherry-picked from 81f2c48f) --- .../gradle/plugin/KotlinTargetConfigurator.kt | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt index 4a1cd78773e..a6ea4605cb0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt @@ -203,9 +203,9 @@ open class KotlinTargetConfigurator( val testImplementationConfiguration = configurations.maybeCreate(testCompilation.implementationConfigurationName) val testRuntimeOnlyConfiguration = configurations.maybeCreate(testCompilation.runtimeOnlyConfigurationName) - compileTestsConfiguration.extendsFrom(compileConfiguration).usesPlatformOf(target) - testImplementationConfiguration.extendsFrom(implementationConfiguration).usesPlatformOf(target) - testRuntimeOnlyConfiguration.extendsFrom(runtimeOnlyConfiguration).usesPlatformOf(target) + compileTestsConfiguration.extendsFrom(compileConfiguration) + testImplementationConfiguration.extendsFrom(implementationConfiguration) + testRuntimeOnlyConfiguration.extendsFrom(runtimeOnlyConfiguration) configurations.maybeCreate(target.apiElementsConfigurationName).apply { description = "API elements for main." @@ -237,7 +237,7 @@ open class KotlinTargetConfigurator( if (mainCompilation is KotlinCompilationToRunnableFiles && testCompilation is KotlinCompilationToRunnableFiles) { val runtimeConfiguration = configurations.maybeCreate(mainCompilation.deprecatedRuntimeConfigurationName) val testRuntimeConfiguration = configurations.maybeCreate(testCompilation.deprecatedRuntimeConfigurationName) - testRuntimeConfiguration.extendsFrom(runtimeConfiguration).usesPlatformOf(target) + testRuntimeConfiguration.extendsFrom(runtimeConfiguration) } defaultConfiguration.extendsFrom(runtimeElementsConfiguration).usesPlatformOf(target) @@ -299,17 +299,13 @@ open class KotlinTargetConfigurator( configurations: ConfigurationContainer ) { val compileConfiguration = configurations.maybeCreate(compilation.deprecatedCompileConfigurationName).apply { - usesPlatformOf(target) isVisible = false - isCanBeConsumed = false isCanBeResolved = true // Needed for IDE import - attributes.attribute(USAGE_ATTRIBUTE, compilation.target.project.usageByName(Usage.JAVA_API)) // API usage for IDE import description = "Dependencies for $compilation (deprecated, use '${compilation.implementationConfigurationName} ' instead)." } val apiConfiguration = configurations.maybeCreate(compilation.apiConfigurationName).apply { extendsFrom(compileConfiguration) - usesPlatformOf(target) isVisible = false isCanBeConsumed = false isCanBeResolved = false @@ -318,7 +314,6 @@ open class KotlinTargetConfigurator( val implementationConfiguration = configurations.maybeCreate(compilation.implementationConfigurationName).apply { extendsFrom(compileConfiguration, apiConfiguration) - usesPlatformOf(target) isVisible = false isCanBeConsumed = false isCanBeResolved = false @@ -326,11 +321,8 @@ open class KotlinTargetConfigurator( } val compileOnlyConfiguration = configurations.maybeCreate(compilation.compileOnlyConfigurationName).apply { - usesPlatformOf(target) isVisible = false - isCanBeConsumed = false isCanBeResolved = true // Needed for IDE import - attributes.attribute(USAGE_ATTRIBUTE, compilation.target.project.usageByName(Usage.JAVA_API)) // API usage for IDE import description = "Compile only dependencies for $compilation." } @@ -346,16 +338,13 @@ open class KotlinTargetConfigurator( if (compilation is KotlinCompilationToRunnableFiles) { val runtimeConfiguration = configurations.maybeCreate(compilation.deprecatedRuntimeConfigurationName).apply { extendsFrom(compileConfiguration) - usesPlatformOf(target) isVisible = false - isCanBeConsumed = false - isCanBeResolved = false + isCanBeResolved = true // Needed for IDE import description = "Runtime dependencies for $compilation (deprecated, use '${compilation.runtimeOnlyConfigurationName} ' instead)." } val runtimeOnlyConfiguration = configurations.maybeCreate(compilation.runtimeOnlyConfigurationName).apply { - usesPlatformOf(target) isVisible = false isCanBeConsumed = false isCanBeResolved = false