我有一个带有多个子项目的项目,这些子项目使用kotlin-multiplatform插件或kotlin-js插件,我想在所有这些插件中使用实验性的无符号类型。
到目前为止,我已经尝试过了,但这不起作用:
subprojects {
tasks.withType<KotlinCompile>().all {
kotlinOptions.freeCompilerArgs += "-Xopt-in=kotlin.ExperimentalUnsignedTypes"
}
extensions.findByType<KotlinMultiplatformExtension>()?.sourceSets {
all {
languageSettings.useExperimentalAnnotation("kotlin.ExperimentalUnsignedTypes")
}
}
}有没有办法将kotlin编译器arg -Xopt-in=kotlin.ExperimentalUnsignedTypes添加到Gradle中的所有子项目中?
发布于 2021-08-19 09:16:46
共享配置的推荐方法是通过约定插件。
即在buildSrc/src/main/kotlin/package/name/kotlin-mpp-conventions.kts中创建一个包含以下内容的文件:
plugins {
kotlin("jvm")
}
kotlin {
sourceSets {
all {
languageSettings.useExperimentalAnnotation("kotlin.ExperimentalUnsignedTypes")
}
}
}然后,通过在plugins块:id("package.name.kotlin-mpp-conventions")中添加对它的引用,依赖于Kotlin子项目中的这个插件。
为例如Kotlin JS项目添加更多插件。如果您希望在所有类型的项目之间共享一些配置,则可以创建其他插件所依赖的通用插件。您还可以在插件之间共享数据结构,只需将它们放在单独的文件中,并从插件文件中引用它们(就像使用普通代码一样),我使用此机制共享我希望在所有插件中允许的Kotlin实验注释列表。
确保设置buildSrc/buildle.gradle.kts用于插件:
plugins {
`kotlin-dsl`
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21")
}发布于 2020-10-03 12:55:25
经过反复的尝试,我已经达到了这个程度,所以我不确定这是正确的方法。
我有一个带有多平台、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
}
}我想同样的方法可能适用于ExperimentalUnsignedTypes。
https://stackoverflow.com/questions/64184157
复制相似问题