Как добавить исходный набор `jvm` по умолчанию для цели` android` в Kotlin Multiplatform? - PullRequest
0 голосов
/ 24 января 2019

С Kotlin / Multiplatform 1.3.11 у меня было следующее build.gradle:

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

Так что в основном я хотел повторно использовать весь код для jvm target для androidtarget.

С только что выпущенным 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 голосов
/ 25 января 2019

На самом деле, лучшее решение - иметь общий набор исходных кодов и по одному для каждой платформы:

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

Поместите общий код в commonJvmMain каталог исходных кодов.

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

...