如何在Gradle构建中定义可重用的块

时间:2018-06-19 16:13:47

标签: gradle kotlin build.gradle reusability code-reuse

我正在为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

2 个答案:

答案 0 :(得分:2)

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

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

来自kotlin docs

答案 1 :(得分:0)

您应该可以通过使用其他属性来执行此操作。

ext.optionNameHere = {
        allWarningsAsErrors = true
        freeCompilerArgs = ["-Xjvm-default=enable", "-Xjsr305=strict"]
        jvmTarget = "1.8"
    }

然后,当您想要拥有它时:

  

compileIntegrationTestKotlin {kotlinOptions = ext.optionNameHere}

已阅读:Gradle Docs  -在其他属性