[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 */
|
/** This configuration includes the dependencies from the refines-parents */
|
||||||
val transitiveImplementationConfiguration: Configuration
|
val transitiveImplementationConfiguration: Configuration
|
||||||
|
|
||||||
|
/** This configuration includes the dependencies from the refines-parents */
|
||||||
|
val transitiveRuntimeOnlyConfiguration: Configuration
|
||||||
|
|
||||||
private class Impl(
|
private class Impl(
|
||||||
override val apiConfiguration: Configuration,
|
override val apiConfiguration: Configuration,
|
||||||
override val implementationConfiguration: Configuration,
|
override val implementationConfiguration: Configuration,
|
||||||
override val compileOnlyConfiguration: Configuration,
|
override val compileOnlyConfiguration: Configuration,
|
||||||
override val runtimeOnlyConfiguration: Configuration,
|
override val runtimeOnlyConfiguration: Configuration,
|
||||||
override val transitiveApiConfiguration: Configuration,
|
override val transitiveApiConfiguration: Configuration,
|
||||||
override val transitiveImplementationConfiguration: Configuration
|
override val transitiveImplementationConfiguration: Configuration,
|
||||||
|
override val transitiveRuntimeOnlyConfiguration: Configuration
|
||||||
) : KotlinFragmentDependencyConfigurations
|
) : KotlinFragmentDependencyConfigurations
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@@ -30,14 +34,16 @@ interface KotlinFragmentDependencyConfigurations : KotlinDependencyConfiguration
|
|||||||
compileOnlyConfiguration: Configuration,
|
compileOnlyConfiguration: Configuration,
|
||||||
runtimeOnlyConfiguration: Configuration,
|
runtimeOnlyConfiguration: Configuration,
|
||||||
transitiveApiConfiguration: Configuration,
|
transitiveApiConfiguration: Configuration,
|
||||||
transitiveImplementationConfiguration: Configuration
|
transitiveImplementationConfiguration: Configuration,
|
||||||
|
transitiveRuntimeOnlyConfiguration: Configuration
|
||||||
): KotlinFragmentDependencyConfigurations = Impl(
|
): KotlinFragmentDependencyConfigurations = Impl(
|
||||||
apiConfiguration = apiConfiguration,
|
apiConfiguration = apiConfiguration,
|
||||||
implementationConfiguration = implementationConfiguration,
|
implementationConfiguration = implementationConfiguration,
|
||||||
compileOnlyConfiguration = compileOnlyConfiguration,
|
compileOnlyConfiguration = compileOnlyConfiguration,
|
||||||
runtimeOnlyConfiguration = runtimeOnlyConfiguration,
|
runtimeOnlyConfiguration = runtimeOnlyConfiguration,
|
||||||
transitiveApiConfiguration = transitiveApiConfiguration,
|
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 {
|
relations = FragmentConfigurationRelation {
|
||||||
extendsFrom(dependencies.transitiveApiConfiguration)
|
extendsFrom(dependencies.transitiveApiConfiguration)
|
||||||
extendsFrom(dependencies.transitiveImplementationConfiguration)
|
extendsFrom(dependencies.transitiveImplementationConfiguration)
|
||||||
|
extendsFrom(dependencies.transitiveRuntimeOnlyConfiguration)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -64,6 +65,7 @@ val DefaultKotlinRuntimeElementsDefinition = ConfigurationDefinition(
|
|||||||
relations = FragmentConfigurationRelation {
|
relations = FragmentConfigurationRelation {
|
||||||
extendsFrom(dependencies.transitiveApiConfiguration)
|
extendsFrom(dependencies.transitiveApiConfiguration)
|
||||||
extendsFrom(dependencies.transitiveImplementationConfiguration)
|
extendsFrom(dependencies.transitiveImplementationConfiguration)
|
||||||
|
extendsFrom(dependencies.transitiveRuntimeOnlyConfiguration)
|
||||||
},
|
},
|
||||||
attributes = KotlinFragmentPlatformAttributes + KotlinFragmentProducerRuntimeUsageAttribute + FragmentAttributes {
|
attributes = KotlinFragmentPlatformAttributes + KotlinFragmentProducerRuntimeUsageAttribute + FragmentAttributes {
|
||||||
attribute(Category.CATEGORY_ATTRIBUTE, fragment.project.objects.named(Category::class.java, Category.LIBRARY))
|
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 runtimeOnlyConfiguration = configurations.maybeCreate(names.disambiguateName("runtimeOnly"))
|
||||||
val transitiveApiConfiguration = configurations.maybeCreate(names.disambiguateName("transitiveApi"))
|
val transitiveApiConfiguration = configurations.maybeCreate(names.disambiguateName("transitiveApi"))
|
||||||
val transitiveImplementationConfiguration = configurations.maybeCreate(names.disambiguateName("transitiveImplementation"))
|
val transitiveImplementationConfiguration = configurations.maybeCreate(names.disambiguateName("transitiveImplementation"))
|
||||||
|
val transitiveRuntimeOnlyConfiguration = configurations.maybeCreate(names.disambiguateName("transitiveRuntimeOnly"))
|
||||||
|
|
||||||
listOf(
|
listOf(
|
||||||
apiConfiguration,
|
apiConfiguration,
|
||||||
@@ -28,7 +29,8 @@ object DefaultKotlinFragmentDependencyConfigurationsFactory : KotlinFragmentDepe
|
|||||||
compileOnlyConfiguration,
|
compileOnlyConfiguration,
|
||||||
runtimeOnlyConfiguration,
|
runtimeOnlyConfiguration,
|
||||||
transitiveApiConfiguration,
|
transitiveApiConfiguration,
|
||||||
transitiveImplementationConfiguration
|
transitiveImplementationConfiguration,
|
||||||
|
transitiveRuntimeOnlyConfiguration
|
||||||
).forEach { configuration ->
|
).forEach { configuration ->
|
||||||
configuration.isCanBeConsumed = false
|
configuration.isCanBeConsumed = false
|
||||||
configuration.isCanBeResolved = false
|
configuration.isCanBeResolved = false
|
||||||
@@ -36,6 +38,7 @@ object DefaultKotlinFragmentDependencyConfigurationsFactory : KotlinFragmentDepe
|
|||||||
|
|
||||||
transitiveApiConfiguration.extendsFrom(apiConfiguration)
|
transitiveApiConfiguration.extendsFrom(apiConfiguration)
|
||||||
transitiveImplementationConfiguration.extendsFrom(implementationConfiguration)
|
transitiveImplementationConfiguration.extendsFrom(implementationConfiguration)
|
||||||
|
transitiveRuntimeOnlyConfiguration.extendsFrom(runtimeOnlyConfiguration)
|
||||||
|
|
||||||
return KotlinFragmentDependencyConfigurations.create(
|
return KotlinFragmentDependencyConfigurations.create(
|
||||||
apiConfiguration = apiConfiguration,
|
apiConfiguration = apiConfiguration,
|
||||||
@@ -43,7 +46,8 @@ object DefaultKotlinFragmentDependencyConfigurationsFactory : KotlinFragmentDepe
|
|||||||
compileOnlyConfiguration = compileOnlyConfiguration,
|
compileOnlyConfiguration = compileOnlyConfiguration,
|
||||||
runtimeOnlyConfiguration = runtimeOnlyConfiguration,
|
runtimeOnlyConfiguration = runtimeOnlyConfiguration,
|
||||||
transitiveApiConfiguration = transitiveApiConfiguration,
|
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
|
this.transitiveImplementationConfiguration.name, other.get().transitiveImplementationConfiguration.name
|
||||||
)
|
)
|
||||||
|
|
||||||
|
project.addExtendsFromRelation(
|
||||||
|
this.transitiveRuntimeOnlyConfiguration.name, other.get().transitiveRuntimeOnlyConfiguration.name
|
||||||
|
)
|
||||||
|
|
||||||
project.runProjectConfigurationHealthCheckWhenEvaluated {
|
project.runProjectConfigurationHealthCheckWhenEvaluated {
|
||||||
kotlinGradleFragmentConsistencyChecker.runAllChecks(this@KotlinGradleFragmentInternal, other.get())
|
kotlinGradleFragmentConsistencyChecker.runAllChecks(this@KotlinGradleFragmentInternal, other.get())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user