如何在 Kotlin DSL 中有条件地接受 Gradle 构建扫描插件服务条款?
How to conditionally accept Gradle build scan plugin terms of service in Kotlin DSL?
这基本上将 扩展到 Kotlin DSL 而不是 Groovy DSL:
的如何
if (hasProperty('buildScan')) {
buildScan {
termsOfServiceUrl = 'https://gradle.com/terms-of-service'
termsOfServiceAgree = 'yes'
}
}
翻译成 Kotlin DSL?
我 运行 的问题是 "buildScan" 扩展或 com.gradle.scan.plugin.BuildScanExtension
class 不能静态使用,因为它们存在或不存在取决于--scan
命令行参数是否提供给 Gradle。
我试过了
if (hasProperty("buildScan")) {
extensions.configure("buildScan") {
termsOfServiceUrl = "https://gradle.com/terms-of-service"
termsOfServiceAgree = "yes"
}
}
但正如预期的那样,termsOfServiceUrl
和 termsOfServiceAgree
没有解析,但是我不知道这里使用什么语法。
它不是很好,但使用反射效果很好:
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")
}
}
Gradle Kotlin DSL 提供了一个 withGroovyBuilder {}
实用程序扩展,可将 Groovy 元编程语义附加到任何对象。见 official documentation.
extensions.findByName("buildScan")?.withGroovyBuilder {
setProperty("termsOfServiceUrl", "https://gradle.com/terms-of-service")
setProperty("termsOfServiceAgree", "yes")
}
这最终会进行反射,就像 Groovy 一样,但它使脚本更加整洁。
这基本上将
if (hasProperty('buildScan')) {
buildScan {
termsOfServiceUrl = 'https://gradle.com/terms-of-service'
termsOfServiceAgree = 'yes'
}
}
翻译成 Kotlin DSL?
我 运行 的问题是 "buildScan" 扩展或 com.gradle.scan.plugin.BuildScanExtension
class 不能静态使用,因为它们存在或不存在取决于--scan
命令行参数是否提供给 Gradle。
我试过了
if (hasProperty("buildScan")) {
extensions.configure("buildScan") {
termsOfServiceUrl = "https://gradle.com/terms-of-service"
termsOfServiceAgree = "yes"
}
}
但正如预期的那样,termsOfServiceUrl
和 termsOfServiceAgree
没有解析,但是我不知道这里使用什么语法。
它不是很好,但使用反射效果很好:
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")
}
}
Gradle Kotlin DSL 提供了一个 withGroovyBuilder {}
实用程序扩展,可将 Groovy 元编程语义附加到任何对象。见 official documentation.
extensions.findByName("buildScan")?.withGroovyBuilder {
setProperty("termsOfServiceUrl", "https://gradle.com/terms-of-service")
setProperty("termsOfServiceAgree", "yes")
}
这最终会进行反射,就像 Groovy 一样,但它使脚本更加整洁。