代码之家  ›  专栏  ›  技术社区  ›  4ntoine

如何在kotlin multiplatform中将默认的“jvm”sourceset添加到“android”target?

  •  0
  • 4ntoine  · 技术社区  · 7 年前

    具有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)
       }
    

    但它不为Android目标重用JVM默认源集:

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

    所以它实际上不使用默认的JVM源代码集,也不抛出groovy语法错误。

    发生了什么?

    1 回复  |  直到 7 年前
        1
  •  2
  •   4ntoine    7 年前

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

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

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

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