kotlin - 如何在 Kotlin Multiplatform 中将默认的 `jvm` sourceSet 添加到 `android` 目标?
问题描述
使用 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 defaultSourceSet:
预期的类“URL”在模块中没有实际声明
所以它实际上并没有使用默认的 jvm 源集,也没有抛出 Groovy 语法错误。
怎么了?
解决方案
实际上,最好的解决方案是有一些通用的源集,并且每个平台都有一个:
commonJvmMain {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
}
}
jvmMain {
dependsOn commonJvmMain
}
androidMain {
dependsOn commonJvmMain
}
将共享代码放在commonJvmMain
sourceset 目录中。
推荐阅读
- odoo-13 - Odoo 13 - 如何在销售订单行选项卡中添加新列
- angularjs - 是否可以通过角度事件打破循环?
- android - 为 Android 构建 Skia 时的问题
- java - 带通配符的类型参数
- java - Android-每次获取一个随机数并调用另一个类中的值
- google-apps-script - 触发执行>30s;没有意义
- spring-boot - 带有 AWS Kinesis 流 @refreshscope 的 Spring 云总线
- google-sheets - 单个单元格上的 Google 表格条件格式
- salesforce - jsforce 搜索不适用于使用 like 运算符的联系人
- mysql - 根据参数对查询结果进行分组和排序