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

时间:2019-01-24 06:53:13

标签: kotlin 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 ,现在出现错误:

  

目标'jvm'已经存在,但不是使用'android'预设创建的。要配置它,请在kotlin.targets中按名称访问它,或使用预设函数'jvm'   打开文件

我试图迁移到新语法:

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

,但不会将jvm defaultSourceSet重复用于Android目标:

  

预期的类“ URL”在模块中没有实际的声明

因此它实际上并不使用默认的jvm源集,并且不会引发Groovy语法错误。

怎么了?

1 个答案:

答案 0 :(得分:2)

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

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

将共享代码放入commonJvmMain源集目录中。

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