我正在为kotlin项目编写gradle构建,其中我想在多个任务中重用相同的kotlinOptions

目前,我的构建脚本看起来像这样,因为kotlinOptions对于每个我不想一遍又一遍地编写的任务都是相同的。

compileKotlin {
    kotlinOptions {
        allWarningsAsErrors = true
        freeCompilerArgs = ["-Xjvm-default=enable", "-Xjsr305=strict"]
        jvmTarget = "1.8"
    }
}

compileTestKotlin {
    kotlinOptions {
        allWarningsAsErrors = true
        freeCompilerArgs = ["-Xjvm-default=enable", "-Xjsr305=strict"]
        jvmTarget = "1.8"
    }
}

compileIntegrationTestKotlin {
    kotlinOptions {
        allWarningsAsErrors = true
        freeCompilerArgs = ["-Xjvm-default=enable", "-Xjsr305=strict"]
        jvmTarget = "1.8"
    }
}

相反,我想一次定义它们,然后在需要的地方重复使用该定义。

我还尝试了以下方法(如Alexs answer中所建议)
ext.optionNameHere = {
    allWarningsAsErrors = true
    freeCompilerArgs = ["-Xjvm-default=enable", "-Xjsr305=strict"]
    jvmTarget = "1.8"
}
compileKotlin { kotlinOptions = ext.optionNameHere }
compileTestKotlin { kotlinOptions = ext.optionNameHere }
compileIntegrationTestKotlin { kotlinOptions = ext.optionNameHere }

导致以下错误消息:
> Cannot get property 'kotlinOptions' on extra properties extension as it does not exist

最佳答案

我为我的特定问题找到了解决方案(仅针对kotlin编译部分)。
我希望有一个更通用的方法。虽然这可能会帮助其他人。

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        // ...
    }
}

来自kotlin docs

10-05 17:59