Align stdlib version also on kotlin-stdlib-jdk7:1.8+ in dependencies

To avoid having transitive kotlin-stdlib-jdk8 with older version leading
 to classpath conflicts.

^KT-54703 In Progress
This commit is contained in:
Yahor Berdnikau
2022-10-31 21:33:56 +01:00
committed by Space Team
parent 5f40ba5bd9
commit 0122b73bae
2 changed files with 36 additions and 4 deletions
@@ -84,6 +84,35 @@ class StdlibAlignmentIT : KGPBaseTest() {
}
}
@JvmGradlePluginTests
@DisplayName("substitution is working when stldib-jdk7:1.8+ is added as dependency")
@GradleTest
fun stdlibJdk7Substitution(gradleVersion: GradleVersion) {
project("sourceSetsKotlinDsl", gradleVersion) {
buildGradleKts.appendText(
"""
|
|dependencies {
| implementation(kotlin("stdlib-jdk7"))
| implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")
|}
""".trimMargin()
)
build("dependencies", "--configuration", "compileClasspath") {
assertOutputContains(
"""
|\--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2
| \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.2
| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.30 -> org.jetbrains.kotlin:kotlin-stdlib:${buildOptions.kotlinVersion} (*)
| \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.5.30 -> ${buildOptions.kotlinVersion}
|
""".trimMargin()
)
}
}
}
@JvmGradlePluginTests
@DisplayName("stdlib-jdk7, stdlib-jdk8 substitution with stdlib:1.8+ in Kotlin DSL")
@GradleTest
@@ -60,7 +60,7 @@ internal fun ConfigurationContainer.configureStdlibSubstitution() = all { config
.withType<ExternalDependency>()
.configureEach { dependency ->
if (dependency.group == KOTLIN_MODULE_GROUP &&
dependency.name == "kotlin-stdlib" &&
(dependency.name == "kotlin-stdlib" || dependency.name == "kotlin-stdlib-jdk7") &&
dependency.version != null &&
SemVer.from(dependency.version!!) >= kotlin180Version
) {
@@ -82,9 +82,12 @@ private fun Configuration.substitudeStdlibJvmVariants(
kotlinStdlibDependency: ExternalDependency
) {
resolutionStrategy.dependencySubstitution {
it.substitute(it.module("org.jetbrains.kotlin:kotlin-stdlib-jdk7"))
.using(it.module("org.jetbrains.kotlin:kotlin-stdlib:${kotlinStdlibDependency.version}"))
.because("kotlin-stdlib-jdk7 is now part of kotlin-stdlib")
if (kotlinStdlibDependency.name != "kotlin-stdlib-jdk7") {
it.substitute(it.module("org.jetbrains.kotlin:kotlin-stdlib-jdk7"))
.using(it.module("org.jetbrains.kotlin:kotlin-stdlib:${kotlinStdlibDependency.version}"))
.because("kotlin-stdlib-jdk7 is now part of kotlin-stdlib")
}
it.substitute(it.module("org.jetbrains.kotlin:kotlin-stdlib-jdk8"))
.using(it.module("org.jetbrains.kotlin:kotlin-stdlib:${kotlinStdlibDependency.version}"))
.because("kotlin-stdlib-jdk8 is now part of kotlin-stdlib")