Daa*_*aan 6 gradle kotlin kotlin-multiplatform kotlin-js
我有一个包含多个使用kotlin-multiplatform插件或kotlin-js插件的子项目的项目,我想在所有这些子项目中使用实验性的无符号类型。
到目前为止,我已经尝试过这个,但不起作用:
subprojects {
tasks.withType<KotlinCompile>().all {
kotlinOptions.freeCompilerArgs += "-Xopt-in=kotlin.ExperimentalUnsignedTypes"
}
extensions.findByType<KotlinMultiplatformExtension>()?.sourceSets {
all {
languageSettings.useExperimentalAnnotation("kotlin.ExperimentalUnsignedTypes")
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法将 kotlin 编译器 arg 添加-Xopt-in=kotlin.ExperimentalUnsignedTypes到 Gradle 中的所有子项目?
我已经通过反复试验达到了这一点,所以我不确定这是正确的方法。
我有一个包含一些多平台、JVM 和 JS 子项目的多项目构建,我想启用kotlin.RequiresOptIn注释。所以我最终为各种 kotlin 编译任务设置了这个编译器参数:
subprojects {
val compilerArgs = listOf("-Xopt-in=kotlin.RequiresOptIn")
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
kotlinOptions.jvmTarget = "1.8"
kotlinOptions.freeCompilerArgs += compilerArgs
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile> {
kotlinOptions.freeCompilerArgs = compilerArgs
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompileCommon> {
kotlinOptions.freeCompilerArgs = compilerArgs
}
}
Run Code Online (Sandbox Code Playgroud)
我想同样的方法也适用于ExperimentalUnsignedTypes.
共享配置的推荐方法是通过约定插件。
即在 buildSrc/src/main/kotlin/package/name/kotlin-mpp-conventions.kts 中创建一个文件,内容如下:
plugins {
kotlin("jvm")
}
kotlin {
sourceSets {
all {
languageSettings.useExperimentalAnnotation("kotlin.ExperimentalUnsignedTypes")
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后通过在插件块中添加对它的引用来依赖 Kotlin MPP 子项目中的该插件:id("package.name.kotlin-mpp-conventions")。
为 Kotlin JS 项目添加更多插件。如果您想在所有类型的项目之间共享某些配置,您可以创建一个其他插件所依赖的通用插件。您还可以在插件之间共享数据结构,只需将它们放在单独的文件中并从插件文件中引用它们(就像使用普通代码一样),我使用此机制来共享我想要允许的 Kotlin 实验注释列表插件。
请务必为插件设置 buildSrc/build.gradle.kts:
plugins {
`kotlin-dsl`
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1037 次 |
| 最近记录: |