[KPM] Implement 'transitiveRuntimeOnly' dependency configuration
This commit is contained in:
committed by
Space
parent
6720742b84
commit
96ec6466c7
+9
-3
@@ -14,13 +14,17 @@ interface KotlinFragmentDependencyConfigurations : KotlinDependencyConfiguration
|
||||
/** This configuration includes the dependencies from the refines-parents */
|
||||
val transitiveImplementationConfiguration: Configuration
|
||||
|
||||
/** This configuration includes the dependencies from the refines-parents */
|
||||
val transitiveRuntimeOnlyConfiguration: Configuration
|
||||
|
||||
private class Impl(
|
||||
override val apiConfiguration: Configuration,
|
||||
override val implementationConfiguration: Configuration,
|
||||
override val compileOnlyConfiguration: Configuration,
|
||||
override val runtimeOnlyConfiguration: Configuration,
|
||||
override val transitiveApiConfiguration: Configuration,
|
||||
override val transitiveImplementationConfiguration: Configuration
|
||||
override val transitiveImplementationConfiguration: Configuration,
|
||||
override val transitiveRuntimeOnlyConfiguration: Configuration
|
||||
) : KotlinFragmentDependencyConfigurations
|
||||
|
||||
companion object {
|
||||
@@ -30,14 +34,16 @@ interface KotlinFragmentDependencyConfigurations : KotlinDependencyConfiguration
|
||||
compileOnlyConfiguration: Configuration,
|
||||
runtimeOnlyConfiguration: Configuration,
|
||||
transitiveApiConfiguration: Configuration,
|
||||
transitiveImplementationConfiguration: Configuration
|
||||
transitiveImplementationConfiguration: Configuration,
|
||||
transitiveRuntimeOnlyConfiguration: Configuration
|
||||
): KotlinFragmentDependencyConfigurations = Impl(
|
||||
apiConfiguration = apiConfiguration,
|
||||
implementationConfiguration = implementationConfiguration,
|
||||
compileOnlyConfiguration = compileOnlyConfiguration,
|
||||
runtimeOnlyConfiguration = runtimeOnlyConfiguration,
|
||||
transitiveApiConfiguration = transitiveApiConfiguration,
|
||||
transitiveImplementationConfiguration = transitiveImplementationConfiguration
|
||||
transitiveImplementationConfiguration = transitiveImplementationConfiguration,
|
||||
transitiveRuntimeOnlyConfiguration = transitiveRuntimeOnlyConfiguration
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@file:Suppress("FunctionName")
|
||||
|
||||
package org.jetbrains.kotlin.gradle.kpm
|
||||
|
||||
import org.gradle.kotlin.dsl.creating
|
||||
import org.gradle.kotlin.dsl.provideDelegate
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class TransitiveRuntimeOnlyConfigurationTest : AbstractKpmExtensionTest() {
|
||||
|
||||
@Test
|
||||
fun `test transitiveRuntimeOnlyConfiguration contains dependencies from refines parents`() {
|
||||
project.applyKpmPlugin()
|
||||
kotlin.mainAndTest {
|
||||
val left = fragments.create("left") { it.refines(common) }
|
||||
val right = fragments.create("right") { it.refines(common) }
|
||||
val bottomLeft = fragments.create("bottom") { it.refines(left) }
|
||||
|
||||
common.dependencies {
|
||||
implementation(project.files("common-implementation.jar"))
|
||||
runtimeOnly(project.files("common-runtimeOnly.jar"))
|
||||
}
|
||||
|
||||
left.dependencies {
|
||||
implementation(project.files("left-implementation.jar"))
|
||||
runtimeOnly(project.files("left-runtimeOnly.jar"))
|
||||
}
|
||||
|
||||
right.dependencies {
|
||||
implementation(project.files("right-implementation.jar"))
|
||||
runtimeOnly(project.files("right-runtimeOnly.jar"))
|
||||
}
|
||||
|
||||
bottomLeft.dependencies {
|
||||
implementation(project.files("bottomLeft-implementation.jar"))
|
||||
runtimeOnly(project.files("bottomLeft-runtimeOnly.jar"))
|
||||
}
|
||||
|
||||
bottomLeft.transitiveRuntimeOnlyConfiguration.isCanBeResolved = true
|
||||
assertEquals(
|
||||
project.files("common-runtimeOnly.jar", "left-runtimeOnly.jar", "bottomLeft-runtimeOnly.jar").toSet(),
|
||||
bottomLeft.transitiveRuntimeOnlyConfiguration.files
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
@@ -34,6 +34,7 @@ val DefaultKotlinRuntimeDependenciesDefinition = ConfigurationDefinition(
|
||||
relations = FragmentConfigurationRelation {
|
||||
extendsFrom(dependencies.transitiveApiConfiguration)
|
||||
extendsFrom(dependencies.transitiveImplementationConfiguration)
|
||||
extendsFrom(dependencies.transitiveRuntimeOnlyConfiguration)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -64,6 +65,7 @@ val DefaultKotlinRuntimeElementsDefinition = ConfigurationDefinition(
|
||||
relations = FragmentConfigurationRelation {
|
||||
extendsFrom(dependencies.transitiveApiConfiguration)
|
||||
extendsFrom(dependencies.transitiveImplementationConfiguration)
|
||||
extendsFrom(dependencies.transitiveRuntimeOnlyConfiguration)
|
||||
},
|
||||
attributes = KotlinFragmentPlatformAttributes + KotlinFragmentProducerRuntimeUsageAttribute + FragmentAttributes {
|
||||
attribute(Category.CATEGORY_ATTRIBUTE, fragment.project.objects.named(Category::class.java, Category.LIBRARY))
|
||||
|
||||
+6
-2
@@ -21,6 +21,7 @@ object DefaultKotlinFragmentDependencyConfigurationsFactory : KotlinFragmentDepe
|
||||
val runtimeOnlyConfiguration = configurations.maybeCreate(names.disambiguateName("runtimeOnly"))
|
||||
val transitiveApiConfiguration = configurations.maybeCreate(names.disambiguateName("transitiveApi"))
|
||||
val transitiveImplementationConfiguration = configurations.maybeCreate(names.disambiguateName("transitiveImplementation"))
|
||||
val transitiveRuntimeOnlyConfiguration = configurations.maybeCreate(names.disambiguateName("transitiveRuntimeOnly"))
|
||||
|
||||
listOf(
|
||||
apiConfiguration,
|
||||
@@ -28,7 +29,8 @@ object DefaultKotlinFragmentDependencyConfigurationsFactory : KotlinFragmentDepe
|
||||
compileOnlyConfiguration,
|
||||
runtimeOnlyConfiguration,
|
||||
transitiveApiConfiguration,
|
||||
transitiveImplementationConfiguration
|
||||
transitiveImplementationConfiguration,
|
||||
transitiveRuntimeOnlyConfiguration
|
||||
).forEach { configuration ->
|
||||
configuration.isCanBeConsumed = false
|
||||
configuration.isCanBeResolved = false
|
||||
@@ -36,6 +38,7 @@ object DefaultKotlinFragmentDependencyConfigurationsFactory : KotlinFragmentDepe
|
||||
|
||||
transitiveApiConfiguration.extendsFrom(apiConfiguration)
|
||||
transitiveImplementationConfiguration.extendsFrom(implementationConfiguration)
|
||||
transitiveRuntimeOnlyConfiguration.extendsFrom(runtimeOnlyConfiguration)
|
||||
|
||||
return KotlinFragmentDependencyConfigurations.create(
|
||||
apiConfiguration = apiConfiguration,
|
||||
@@ -43,7 +46,8 @@ object DefaultKotlinFragmentDependencyConfigurationsFactory : KotlinFragmentDepe
|
||||
compileOnlyConfiguration = compileOnlyConfiguration,
|
||||
runtimeOnlyConfiguration = runtimeOnlyConfiguration,
|
||||
transitiveApiConfiguration = transitiveApiConfiguration,
|
||||
transitiveImplementationConfiguration = transitiveImplementationConfiguration
|
||||
transitiveImplementationConfiguration = transitiveImplementationConfiguration,
|
||||
transitiveRuntimeOnlyConfiguration = transitiveRuntimeOnlyConfiguration
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+4
@@ -58,6 +58,10 @@ open class KotlinGradleFragmentInternal @Inject constructor(
|
||||
this.transitiveImplementationConfiguration.name, other.get().transitiveImplementationConfiguration.name
|
||||
)
|
||||
|
||||
project.addExtendsFromRelation(
|
||||
this.transitiveRuntimeOnlyConfiguration.name, other.get().transitiveRuntimeOnlyConfiguration.name
|
||||
)
|
||||
|
||||
project.runProjectConfigurationHealthCheckWhenEvaluated {
|
||||
kotlinGradleFragmentConsistencyChecker.runAllChecks(this@KotlinGradleFragmentInternal, other.get())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user