如何在 Kotlin Multiplatform 中将默认的 `jvm` sourceSet 添加到 `android` 目标?

How to add default `jvm` sourceSet to `android` target in Kotlin Multiplatform?

使用 Kotlin/Multiplatform 1.3.11 我有以下 build.gradle:

    fromPreset(presets.jvm, 'jvm')
    fromPreset(presets.android, 'jvm') // reusing jvm sources for android platform impl

所以基本上我想将 jvm 目标的所有代码重新用于 android 目标。

刚刚发布的 Kotlin/Multiplatform 1.3.20 现在我收到一个错误:

The target 'jvm' already exists, but it was not created with the 'android' preset. To configure it, access it by name in kotlin.targets or use the preset function 'jvm' Open File

我已尝试迁移到新语法:

   jvm()
   android() {
   sourceSets.add(kotlin.targets.jvm.compilations.main.defaultSourceSet)
   }

但它不会为 Android 目标重用 jvm defaultSourceSet:

Expected class 'URL' has no actual declaration in module

所以它实际上并没有使用默认的 jvm 源集,也没有抛出 Groovy 语法错误。

怎么了?

实际上,最好的解决方案是拥有一些通用的源代码集,每个平台都有一个:

    commonJvmMain {
        dependencies {
            implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
        }
    }
    jvmMain {
        dependsOn commonJvmMain
    }
    androidMain {
        dependsOn commonJvmMain
    }

将共享代码放在 commonJvmMain sourceset 目录中。

https://github.com/JetBrains/kotlin-native/issues/2577