Exclude stdlib-common from jvm-specific compilations and source sets

^KT-46936 Fixed

Note that it is the slightly hack-ish fix; the proper one would remove
the dependency from kotlin-stdlib to kotlin-stdlib-common
This commit is contained in:
Dmitry Savvinov
2021-06-01 18:24:53 +03:00
committed by teamcityserver
parent fa869c2c2a
commit 4f8c854ead
2 changed files with 199 additions and 5 deletions
@@ -55,8 +55,8 @@ class HierarchicalMultiplatformProjectImportingTest : MultiplePluginVersionGradl
}
@Test
@PluginTargetVersions()
fun testImportIntermediateModules() {
@PluginTargetVersions(pluginVersion = "<1.5.30")
fun testImportIntermediateModules_old() {
configureByFiles()
importProject()
@@ -230,6 +230,180 @@ class HierarchicalMultiplatformProjectImportingTest : MultiplePluginVersionGradl
}
}
@Test
@PluginTargetVersions(pluginVersion = "1.5.30+")
fun testImportIntermediateModules_new() {
configureByFiles()
importProject()
checkProjectStructure {
module("my-app")
module("my-app.commonMain") {
isHMPP(true)
targetPlatform(JsPlatforms.defaultJsPlatform, JvmPlatforms.jvm16, NativePlatforms.unspecifiedNativePlatform)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${gradleKotlinPluginVersion}", DependencyScope.COMPILE)
sourceFolder("src/commonMain/kotlin", SourceKotlinRootType)
sourceFolder("src/commonMain/resources", ResourceKotlinRootType)
}
module("my-app.commonTest") {
isHMPP(true)
targetPlatform(JsPlatforms.defaultJsPlatform, JvmPlatforms.jvm16, NativePlatforms.unspecifiedNativePlatform)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
moduleDependency("my-app.commonMain", DependencyScope.TEST)
sourceFolder("src/commonTest/kotlin", TestSourceKotlinRootType)
sourceFolder("src/commonTest/resources", TestResourceKotlinRootType)
}
module("my-app.jsMain") {
isHMPP(true)
targetPlatform(JsPlatforms.defaultJsPlatform)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${gradleKotlinPluginVersion}", DependencyScope.COMPILE)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-js:${gradleKotlinPluginVersion}", DependencyScope.COMPILE)
moduleDependency("my-app.commonMain", DependencyScope.COMPILE)
moduleDependency("my-app.jvmAndJsMain", DependencyScope.COMPILE)
moduleDependency("my-app.linuxAndJsMain", DependencyScope.COMPILE)
sourceFolder("src/jsMain/kotlin", SourceKotlinRootType)
sourceFolder("src/jsMain/resources", ResourceKotlinRootType)
}
module("my-app.jsTest") {
isHMPP(true)
targetPlatform(JsPlatforms.defaultJsPlatform)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-js:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-js:${gradleKotlinPluginVersion}", DependencyScope.TEST)
moduleDependency("my-app.commonMain", DependencyScope.TEST)
moduleDependency("my-app.commonTest", DependencyScope.TEST)
moduleDependency("my-app.jsMain", DependencyScope.TEST)
moduleDependency("my-app.jsMain", DependencyScope.RUNTIME) // Temporary dependency, need to remove after KT-40551 is solved
moduleDependency("my-app.jvmAndJsMain", DependencyScope.TEST)
moduleDependency("my-app.jvmAndJsTest", DependencyScope.TEST)
moduleDependency("my-app.linuxAndJsMain", DependencyScope.TEST)
moduleDependency("my-app.linuxAndJsTest", DependencyScope.TEST)
sourceFolder("src/jsTest/kotlin", TestSourceKotlinRootType)
sourceFolder("src/jsTest/resources", TestResourceKotlinRootType)
}
module("my-app.jvmAndJsMain") {
isHMPP(true)
targetPlatform(JsPlatforms.defaultJsPlatform, JvmPlatforms.jvm16)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${gradleKotlinPluginVersion}", DependencyScope.COMPILE)
moduleDependency("my-app.commonMain", DependencyScope.COMPILE)
sourceFolder("src/jvmAndJsMain/kotlin", SourceKotlinRootType)
sourceFolder("src/jvmAndJsMain/resources", ResourceKotlinRootType)
}
module("my-app.jvmAndJsTest") {
isHMPP(true)
targetPlatform(JsPlatforms.defaultJsPlatform, JvmPlatforms.jvm16)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
moduleDependency("my-app.commonMain", DependencyScope.TEST)
moduleDependency("my-app.commonTest", DependencyScope.TEST)
moduleDependency("my-app.jvmAndJsMain", DependencyScope.TEST)
sourceFolder("src/jvmAndJsTest/kotlin", TestSourceKotlinRootType)
sourceFolder("src/jvmAndJsTest/resources", TestResourceKotlinRootType)
}
module("my-app.jvmMain") {
isHMPP(true)
targetPlatform(JvmPlatforms.jvm16)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:${gradleKotlinPluginVersion}", DependencyScope.COMPILE)
libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.COMPILE)
moduleDependency("my-app.commonMain", DependencyScope.COMPILE)
moduleDependency("my-app.jvmAndJsMain", DependencyScope.COMPILE)
sourceFolder("src/jvmMain/kotlin", JavaSourceRootType.SOURCE)
sourceFolder("src/jvmMain/resources", JavaResourceRootType.RESOURCE)
}
module("my-app.jvmTest") {
isHMPP(true)
targetPlatform(JvmPlatforms.jvm16)
libraryDependency("Gradle: junit:junit:4.12", DependencyScope.TEST)
libraryDependency("Gradle: org.hamcrest:hamcrest-core:1.3", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-junit:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.TEST)
moduleDependency("my-app.commonMain", DependencyScope.TEST)
moduleDependency("my-app.commonTest", DependencyScope.TEST)
moduleDependency("my-app.jvmAndJsMain", DependencyScope.TEST)
moduleDependency("my-app.jvmAndJsTest", DependencyScope.TEST)
moduleDependency("my-app.jvmMain", DependencyScope.TEST)
moduleDependency("my-app.jvmMain", DependencyScope.RUNTIME) // Temporary dependency, need to remove after KT-40551 is solved
sourceFolder("src/jvmTest/kotlin", JavaSourceRootType.TEST_SOURCE)
sourceFolder("src/jvmTest/resources", JavaResourceRootType.TEST_RESOURCE)
}
module("my-app.linuxAndJsMain") {
isHMPP(true)
targetPlatform(JsPlatforms.defaultJsPlatform, NativePlatforms.unspecifiedNativePlatform)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${gradleKotlinPluginVersion}", DependencyScope.COMPILE)
moduleDependency("my-app.commonMain", DependencyScope.COMPILE)
sourceFolder("src/linuxAndJsMain/kotlin", SourceKotlinRootType)
sourceFolder("src/linuxAndJsMain/resources", ResourceKotlinRootType)
}
module("my-app.linuxAndJsTest") {
isHMPP(true)
targetPlatform(JsPlatforms.defaultJsPlatform, NativePlatforms.unspecifiedNativePlatform)
sourceFolder("src/linuxAndJsTest/kotlin", TestSourceKotlinRootType)
sourceFolder("src/linuxAndJsTest/resources", TestResourceKotlinRootType)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
moduleDependency("my-app.commonMain", DependencyScope.TEST)
moduleDependency("my-app.commonTest", DependencyScope.TEST)
moduleDependency("my-app.linuxAndJsMain", DependencyScope.TEST)
}
module("my-app.linuxX64Main") {
isHMPP(true)
targetPlatform(NativePlatforms.nativePlatformBySingleTarget(KonanTarget.LINUX_X64))
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${gradleKotlinPluginVersion}", DependencyScope.COMPILE)
libraryDependency("Kotlin/Native ${gradleKotlinPluginVersion} - builtin [linux_x64]", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native ${gradleKotlinPluginVersion} - iconv [linux_x64]", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native ${gradleKotlinPluginVersion} - linux [linux_x64]", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native ${gradleKotlinPluginVersion} - posix [linux_x64]", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native ${gradleKotlinPluginVersion} - stdlib", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native ${gradleKotlinPluginVersion} - zlib [linux_x64]", DependencyScope.PROVIDED)
moduleDependency("my-app.commonMain", DependencyScope.COMPILE)
moduleDependency("my-app.linuxAndJsMain", DependencyScope.COMPILE)
sourceFolder("src/linuxX64Main/kotlin", SourceKotlinRootType)
sourceFolder("src/linuxX64Main/resources", ResourceKotlinRootType)
}
module("my-app.linuxX64Test") {
isHMPP(true)
targetPlatform(NativePlatforms.nativePlatformBySingleTarget(KonanTarget.LINUX_X64))
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Kotlin/Native ${gradleKotlinPluginVersion} - builtin [linux_x64]", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native ${gradleKotlinPluginVersion} - iconv [linux_x64]", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native ${gradleKotlinPluginVersion} - linux [linux_x64]", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native ${gradleKotlinPluginVersion} - posix [linux_x64]", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native ${gradleKotlinPluginVersion} - stdlib", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native ${gradleKotlinPluginVersion} - zlib [linux_x64]", DependencyScope.PROVIDED)
moduleDependency("my-app.commonMain", DependencyScope.TEST)
moduleDependency("my-app.commonTest", DependencyScope.TEST)
moduleDependency("my-app.linuxAndJsMain", DependencyScope.TEST)
moduleDependency("my-app.linuxAndJsTest", DependencyScope.TEST)
moduleDependency("my-app.linuxX64Main", DependencyScope.TEST)
sourceFolder("src/linuxX64Test/kotlin", TestSourceKotlinRootType)
sourceFolder("src/linuxX64Test/resources", TestResourceKotlinRootType)
}
}
}
@Test
@PluginTargetVersions()
fun testJvmWithJavaOnHMPP() {
@@ -599,7 +773,7 @@ class HierarchicalMultiplatformProjectImportingTest : MultiplePluginVersionGradl
}
@Test
@PluginTargetVersions()
@PluginTargetVersions(pluginVersion = "1.5.30+")
fun testDependencyOnStdlibFromPlatformSourceSets() {
configureByFiles()
importProject()
@@ -607,7 +781,6 @@ class HierarchicalMultiplatformProjectImportingTest : MultiplePluginVersionGradl
checkProjectStructure(exhaustiveModuleList = false, exhaustiveSourceSourceRootList = false, exhaustiveDependencyList = true) {
module("my-app.jvmMain") {
moduleDependency("my-app.commonMain", DependencyScope.COMPILE)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${gradleKotlinPluginVersion}", DependencyScope.COMPILE)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:${gradleKotlinPluginVersion}", DependencyScope.COMPILE)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:${gradleKotlinPluginVersion}", DependencyScope.COMPILE)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:${gradleKotlinPluginVersion}", DependencyScope.COMPILE)
@@ -619,7 +792,6 @@ class HierarchicalMultiplatformProjectImportingTest : MultiplePluginVersionGradl
moduleDependency("my-app.jvmMain", DependencyScope.TEST)
moduleDependency("my-app.jvmMain", DependencyScope.TEST)
moduleDependency("my-app.commonMain", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:${gradleKotlinPluginVersion}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:${gradleKotlinPluginVersion}", DependencyScope.TEST)
@@ -34,6 +34,7 @@ import org.jetbrains.kotlin.gradle.plugin.sources.withAllDependsOnSourceSets
import org.jetbrains.kotlin.gradle.plugin.sources.resolveAllDependsOnSourceSets
import org.jetbrains.kotlin.gradle.plugin.sources.sourceSetDependencyConfigurationByScope
import org.jetbrains.kotlin.gradle.targets.jvm.JvmCompilationsTestRunSource
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
import org.jetbrains.kotlin.gradle.tasks.KOTLIN_MODULE_GROUP
import org.jetbrains.kotlin.gradle.tasks.locateTask
import org.jetbrains.kotlin.gradle.testing.KotlinTaskTestRun
@@ -46,6 +47,7 @@ internal fun customizeKotlinDependencies(project: Project) {
configureKotlinTestDependency(project)
}
configureDefaultVersionsResolutionStrategy(project)
excludeStdlibCommonFromJvmCompilationsAndSourceSets(project)
}
private fun configureDefaultVersionsResolutionStrategy(project: Project) {
@@ -61,6 +63,26 @@ private fun configureDefaultVersionsResolutionStrategy(project: Project) {
}
//region stdlib
private fun excludeStdlibCommonFromJvmCompilationsAndSourceSets(project: Project) {
val multiplatformExtension = project.multiplatformExtensionOrNull ?: return
multiplatformExtension.targets.withType(KotlinJvmTarget::class.java).all { jvmTarget ->
val configurationsNamesToExcludeStdlibFrom: MutableList<String> = mutableListOf()
jvmTarget.compilations.forEach {
configurationsNamesToExcludeStdlibFrom += it.compileDependencyConfigurationName
configurationsNamesToExcludeStdlibFrom += it.runtimeDependencyConfigurationName
configurationsNamesToExcludeStdlibFrom += it.defaultSourceSet.apiMetadataConfigurationName
configurationsNamesToExcludeStdlibFrom += it.defaultSourceSet.implementationMetadataConfigurationName
}
configurationsNamesToExcludeStdlibFrom.forEach {
project.configurations.getByName(it).exclude(
mapOf("group" to "org.jetbrains.kotlin", "module" to "kotlin-stdlib-common")
)
}
}
}
internal fun configureStdlibDefaultDependency(project: Project) = with(project) {
if (!PropertiesProvider(project).stdlibDefaultDependency)
return