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)
This commit is contained in:
+5
-16
@@ -203,9 +203,9 @@ open class KotlinTargetConfigurator(
|
|||||||
val testImplementationConfiguration = configurations.maybeCreate(testCompilation.implementationConfigurationName)
|
val testImplementationConfiguration = configurations.maybeCreate(testCompilation.implementationConfigurationName)
|
||||||
val testRuntimeOnlyConfiguration = configurations.maybeCreate(testCompilation.runtimeOnlyConfigurationName)
|
val testRuntimeOnlyConfiguration = configurations.maybeCreate(testCompilation.runtimeOnlyConfigurationName)
|
||||||
|
|
||||||
compileTestsConfiguration.extendsFrom(compileConfiguration).usesPlatformOf(target)
|
compileTestsConfiguration.extendsFrom(compileConfiguration)
|
||||||
testImplementationConfiguration.extendsFrom(implementationConfiguration).usesPlatformOf(target)
|
testImplementationConfiguration.extendsFrom(implementationConfiguration)
|
||||||
testRuntimeOnlyConfiguration.extendsFrom(runtimeOnlyConfiguration).usesPlatformOf(target)
|
testRuntimeOnlyConfiguration.extendsFrom(runtimeOnlyConfiguration)
|
||||||
|
|
||||||
configurations.maybeCreate(target.apiElementsConfigurationName).apply {
|
configurations.maybeCreate(target.apiElementsConfigurationName).apply {
|
||||||
description = "API elements for main."
|
description = "API elements for main."
|
||||||
@@ -237,7 +237,7 @@ open class KotlinTargetConfigurator(
|
|||||||
if (mainCompilation is KotlinCompilationToRunnableFiles && testCompilation is KotlinCompilationToRunnableFiles) {
|
if (mainCompilation is KotlinCompilationToRunnableFiles && testCompilation is KotlinCompilationToRunnableFiles) {
|
||||||
val runtimeConfiguration = configurations.maybeCreate(mainCompilation.deprecatedRuntimeConfigurationName)
|
val runtimeConfiguration = configurations.maybeCreate(mainCompilation.deprecatedRuntimeConfigurationName)
|
||||||
val testRuntimeConfiguration = configurations.maybeCreate(testCompilation.deprecatedRuntimeConfigurationName)
|
val testRuntimeConfiguration = configurations.maybeCreate(testCompilation.deprecatedRuntimeConfigurationName)
|
||||||
testRuntimeConfiguration.extendsFrom(runtimeConfiguration).usesPlatformOf(target)
|
testRuntimeConfiguration.extendsFrom(runtimeConfiguration)
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultConfiguration.extendsFrom(runtimeElementsConfiguration).usesPlatformOf(target)
|
defaultConfiguration.extendsFrom(runtimeElementsConfiguration).usesPlatformOf(target)
|
||||||
@@ -299,17 +299,13 @@ open class KotlinTargetConfigurator(
|
|||||||
configurations: ConfigurationContainer
|
configurations: ConfigurationContainer
|
||||||
) {
|
) {
|
||||||
val compileConfiguration = configurations.maybeCreate(compilation.deprecatedCompileConfigurationName).apply {
|
val compileConfiguration = configurations.maybeCreate(compilation.deprecatedCompileConfigurationName).apply {
|
||||||
usesPlatformOf(target)
|
|
||||||
isVisible = false
|
isVisible = false
|
||||||
isCanBeConsumed = false
|
|
||||||
isCanBeResolved = true // Needed for IDE import
|
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)."
|
description = "Dependencies for $compilation (deprecated, use '${compilation.implementationConfigurationName} ' instead)."
|
||||||
}
|
}
|
||||||
|
|
||||||
val apiConfiguration = configurations.maybeCreate(compilation.apiConfigurationName).apply {
|
val apiConfiguration = configurations.maybeCreate(compilation.apiConfigurationName).apply {
|
||||||
extendsFrom(compileConfiguration)
|
extendsFrom(compileConfiguration)
|
||||||
usesPlatformOf(target)
|
|
||||||
isVisible = false
|
isVisible = false
|
||||||
isCanBeConsumed = false
|
isCanBeConsumed = false
|
||||||
isCanBeResolved = false
|
isCanBeResolved = false
|
||||||
@@ -318,7 +314,6 @@ open class KotlinTargetConfigurator(
|
|||||||
|
|
||||||
val implementationConfiguration = configurations.maybeCreate(compilation.implementationConfigurationName).apply {
|
val implementationConfiguration = configurations.maybeCreate(compilation.implementationConfigurationName).apply {
|
||||||
extendsFrom(compileConfiguration, apiConfiguration)
|
extendsFrom(compileConfiguration, apiConfiguration)
|
||||||
usesPlatformOf(target)
|
|
||||||
isVisible = false
|
isVisible = false
|
||||||
isCanBeConsumed = false
|
isCanBeConsumed = false
|
||||||
isCanBeResolved = false
|
isCanBeResolved = false
|
||||||
@@ -326,11 +321,8 @@ open class KotlinTargetConfigurator(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val compileOnlyConfiguration = configurations.maybeCreate(compilation.compileOnlyConfigurationName).apply {
|
val compileOnlyConfiguration = configurations.maybeCreate(compilation.compileOnlyConfigurationName).apply {
|
||||||
usesPlatformOf(target)
|
|
||||||
isVisible = false
|
isVisible = false
|
||||||
isCanBeConsumed = false
|
|
||||||
isCanBeResolved = true // Needed for IDE import
|
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."
|
description = "Compile only dependencies for $compilation."
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -346,16 +338,13 @@ open class KotlinTargetConfigurator(
|
|||||||
if (compilation is KotlinCompilationToRunnableFiles) {
|
if (compilation is KotlinCompilationToRunnableFiles) {
|
||||||
val runtimeConfiguration = configurations.maybeCreate(compilation.deprecatedRuntimeConfigurationName).apply {
|
val runtimeConfiguration = configurations.maybeCreate(compilation.deprecatedRuntimeConfigurationName).apply {
|
||||||
extendsFrom(compileConfiguration)
|
extendsFrom(compileConfiguration)
|
||||||
usesPlatformOf(target)
|
|
||||||
isVisible = false
|
isVisible = false
|
||||||
isCanBeConsumed = false
|
isCanBeResolved = true // Needed for IDE import
|
||||||
isCanBeResolved = false
|
|
||||||
description =
|
description =
|
||||||
"Runtime dependencies for $compilation (deprecated, use '${compilation.runtimeOnlyConfigurationName} ' instead)."
|
"Runtime dependencies for $compilation (deprecated, use '${compilation.runtimeOnlyConfigurationName} ' instead)."
|
||||||
}
|
}
|
||||||
|
|
||||||
val runtimeOnlyConfiguration = configurations.maybeCreate(compilation.runtimeOnlyConfigurationName).apply {
|
val runtimeOnlyConfiguration = configurations.maybeCreate(compilation.runtimeOnlyConfigurationName).apply {
|
||||||
usesPlatformOf(target)
|
|
||||||
isVisible = false
|
isVisible = false
|
||||||
isCanBeConsumed = false
|
isCanBeConsumed = false
|
||||||
isCanBeResolved = false
|
isCanBeResolved = false
|
||||||
|
|||||||
Reference in New Issue
Block a user