首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将-Xopt-in=kotlin.ExperimentalUnsigndTypes应用于所有子项目?

如何将-Xopt-in=kotlin.ExperimentalUnsigndTypes应用于所有子项目?
EN

Stack Overflow用户
提问于 2020-10-03 12:17:13
回答 2查看 3.3K关注 0票数 10

我有一个带有多个子项目的项目,这些子项目使用kotlin-multiplatform插件或kotlin-js插件,我想在所有这些插件中使用实验性的无符号类型。

到目前为止,我已经尝试过了,但这不起作用:

代码语言:javascript
复制
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中的所有子项目中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-19 09:16:46

共享配置的推荐方法是通过约定插件

即在buildSrc/src/main/kotlin/package/name/kotlin-mpp-conventions.kts中创建一个包含以下内容的文件:

代码语言:javascript
复制
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用于插件:

代码语言:javascript
复制
plugins {
    `kotlin-dsl`
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21")
}
票数 4
EN

Stack Overflow用户

发布于 2020-10-03 12:55:25

经过反复的尝试,我已经达到了这个程度,所以我不确定这是正确的方法。

我有一个带有多平台、JVM和JS子项目的多项目构建,我希望启用kotlin.RequiresOptIn注释。最后,我为所有类型的kotlin编译任务设置了这个编译器参数:

代码语言:javascript
复制
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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64184157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档