Exclude stdlib-common from non-JVM targets as well

This is a continuation of KT-46936. This commit removes stdlib-common
from platform-specific source sets of JS/Native targets, as well as
Android and 'jvm { withJava() }'

The tests are made on kotlin-ide side, see the KT-46936 for attached
commits.

^KT-46936
^KT-47695 Fixed
^KT-47604 Fixed
This commit is contained in:
Dmitry Savvinov
2021-07-05 11:57:17 +03:00
committed by TeamCityServer
parent ce79fc77c9
commit 45a384bb77
2 changed files with 21 additions and 19 deletions
@@ -293,13 +293,6 @@ open class KotlinAndroid36GradleIT : KotlinAndroid34GradleIT() {
testResolveAllConfigurations("lib") { testResolveAllConfigurations("lib") {
assertSuccessful() assertSuccessful()
// commonMain:
assertContains(">> :lib:debugCompileClasspath --> kotlin-stdlib-common-$kotlinVersion.jar")
assertContains(">> :lib:releaseCompileClasspath --> kotlin-stdlib-common-$kotlinVersion.jar")
assertContains(">> :lib:debugAndroidTestCompileClasspath --> kotlin-stdlib-common-$kotlinVersion.jar")
assertContains(">> :lib:debugUnitTestCompileClasspath --> kotlin-stdlib-common-$kotlinVersion.jar")
assertContains(">> :lib:releaseUnitTestCompileClasspath --> kotlin-stdlib-common-$kotlinVersion.jar")
// androidLibDebug: // androidLibDebug:
assertContains(">> :lib:debugCompileClasspath --> kotlin-reflect-$kotlinVersion.jar") assertContains(">> :lib:debugCompileClasspath --> kotlin-reflect-$kotlinVersion.jar")
assertNotContains(">> :lib:releaseCompileClasspath --> kotlin-reflect-$kotlinVersion.jar") assertNotContains(">> :lib:releaseCompileClasspath --> kotlin-reflect-$kotlinVersion.jar")
@@ -15,6 +15,7 @@ import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.Dependency import org.gradle.api.artifacts.Dependency
import org.gradle.api.artifacts.DependencySet import org.gradle.api.artifacts.DependencySet
import org.gradle.api.artifacts.ExternalDependency import org.gradle.api.artifacts.ExternalDependency
import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.tasks.testing.AbstractTestTask import org.gradle.api.tasks.testing.AbstractTestTask
import org.gradle.api.tasks.testing.Test import org.gradle.api.tasks.testing.Test
import org.gradle.api.tasks.testing.junit.JUnitOptions import org.gradle.api.tasks.testing.junit.JUnitOptions
@@ -47,7 +48,7 @@ internal fun customizeKotlinDependencies(project: Project) {
configureKotlinTestDependency(project) configureKotlinTestDependency(project)
} }
configureDefaultVersionsResolutionStrategy(project) configureDefaultVersionsResolutionStrategy(project)
excludeStdlibCommonFromJvmCompilationsAndSourceSets(project) excludeStdlibCommonFromPlatformCompilations(project)
} }
private fun configureDefaultVersionsResolutionStrategy(project: Project) { private fun configureDefaultVersionsResolutionStrategy(project: Project) {
@@ -63,20 +64,28 @@ private fun configureDefaultVersionsResolutionStrategy(project: Project) {
} }
//region stdlib //region stdlib
private fun excludeStdlibCommonFromJvmCompilationsAndSourceSets(project: Project) { private fun excludeStdlibCommonFromPlatformCompilations(project: Project) {
val multiplatformExtension = project.multiplatformExtensionOrNull ?: return val multiplatformExtension = project.multiplatformExtensionOrNull ?: return
multiplatformExtension.targets.withType(KotlinJvmTarget::class.java).all { jvmTarget -> multiplatformExtension.targets.matching { it !is KotlinMetadataTarget }.all {
val configurationsNamesToExcludeStdlibFrom: MutableList<String> = mutableListOf() it.excludeStdlibCommonFromPlatformCompilations()
jvmTarget.compilations.forEach { }
configurationsNamesToExcludeStdlibFrom += it.compileDependencyConfigurationName }
configurationsNamesToExcludeStdlibFrom += it.runtimeDependencyConfigurationName
configurationsNamesToExcludeStdlibFrom += it.defaultSourceSet.apiMetadataConfigurationName
configurationsNamesToExcludeStdlibFrom += it.defaultSourceSet.implementationMetadataConfigurationName
}
configurationsNamesToExcludeStdlibFrom.forEach { // there several JVM-like targets, like KotlinWithJava, or KotlinAndroid, and they don't have common supertype
project.configurations.getByName(it).exclude( // aside from KotlinTarget
private fun KotlinTarget.excludeStdlibCommonFromPlatformCompilations() {
compilations.all {
listOfNotNull(
it.compileDependencyConfigurationName,
it.defaultSourceSet.apiMetadataConfigurationName,
it.defaultSourceSet.implementationMetadataConfigurationName,
(it as? KotlinCompilationToRunnableFiles<*>)?.runtimeDependencyConfigurationName,
// Additional configurations for (old) jvmWithJava-preset. Remove it when we drop it completely
(it as? KotlinWithJavaCompilation<*>)?.apiConfigurationName
).forEach { configurationName ->
project.configurations.getByName(configurationName).exclude(
mapOf("group" to "org.jetbrains.kotlin", "module" to "kotlin-stdlib-common") mapOf("group" to "org.jetbrains.kotlin", "module" to "kotlin-stdlib-common")
) )
} }