首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何有条件地接受Kotlin DSL中Gradle build scan插件的服务?

如何有条件地接受Kotlin DSL中Gradle build scan插件的服务?
EN

Stack Overflow用户
提问于 2019-04-17 18:34:30
回答 2查看 845关注 0票数 9

这基本上将this question扩展到Kotlin DSL,而不是Groovy DSL:

Groovy DSL solution是如何

代码语言:javascript
复制
if (hasProperty('buildScan')) {
    buildScan {
        termsOfServiceUrl = 'https://gradle.com/terms-of-service'
        termsOfServiceAgree = 'yes'
    }
}

翻译成Kotlin DSL?

我运行的问题是"buildScan“扩展或com.gradle.scan.plugin.BuildScanExtension类不能静态使用,因为它们是否存在取决于是否为Gradle提供了--scan命令行参数。

我试过了

代码语言:javascript
复制
if (hasProperty("buildScan")) {
    extensions.configure("buildScan") {
        termsOfServiceUrl = "https://gradle.com/terms-of-service"
        termsOfServiceAgree = "yes"
    }
}

但是正如预期的那样,termsOfServiceUrltermsOfServiceAgree不能解析,但是我不知道在这里使用什么语法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-17 23:42:27

Gradle Kotlin DSL提供了一个withGroovyBuilder {}实用程序扩展,可以将Groovy元编程语义附加到任何对象。请参阅official documentation

代码语言:javascript
复制
extensions.findByName("buildScan")?.withGroovyBuilder {
  setProperty("termsOfServiceUrl", "https://gradle.com/terms-of-service")
  setProperty("termsOfServiceAgree", "yes")
}

这最终完成了反射,就像Groovy一样,但它使脚本更整洁一些。

票数 7
EN

Stack Overflow用户

发布于 2019-04-17 19:18:50

这并不是很好,但是使用反射它是有效的:

代码语言:javascript
复制
if (hasProperty("buildScan")) {
    extensions.configure("buildScan") {
        val setTermsOfServiceUrl = javaClass.getMethod("setTermsOfServiceUrl", String::class.java)
        setTermsOfServiceUrl.invoke(this, "https://gradle.com/terms-of-service")

        val setTermsOfServiceAgree = javaClass.getMethod("setTermsOfServiceAgree", String::class.java)
        setTermsOfServiceAgree.invoke(this, "yes")
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55725574

复制
相关文章

相似问题

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