我在一个基于groovy的构建脚本中有以下代码。我如何在一个基于kotlin的脚本中做同样的事情呢?
processResources { filesMatching('application.properties'){ expand(project.properties) } }
wlzqhblo1#
为什么不直接用"withType"呢?我只是说(恕我直言)
tasks { withType<ProcessResources> { .. }
看起来比
tasks { "processResources"(ProcessResources::class) { .. }
所以,
tasks.withType<ProcessResources> { //from("${project.projectDir}src/main/resources") //into("${project.buildDir}/whatever/") filesMatching("*.cfg") { expand(project.properties) } }
使用新版本,您可以执行以下操作:
tasks.processResources {}
或
tasks { processResources {} }
生成的访问器是"懒惰的",因此它具有所有的优点,没有缺点。
0kjbasz62#
我认为任务应该如下所示:
编辑:根据gradle/kotlin-dsl存储库中的此注解。任务配置应按以下方式工作:
import org.gradle.language.jvm.tasks.ProcessResources apply { plugin("java") } (tasks.getByName("processResources") as ProcessResources).apply { filesMatching("application.properties") { expand(project.properties) } }
这是相当丑陋的。所以我建议以下效用函数为这个目的,直到一个上游完成:
configure<ProcessResources>("processResources") { filesMatching("application.properties") { expand(project.properties) } } inline fun <reified C> Project.configure(name: String, configuration: C.() -> Unit) { (this.tasks.getByName(name) as C).configuration() }
khbbv19g3#
随着KotlinDSL和Gradle新版本中API的更新,您可以执行以下操作:
import org.gradle.language.jvm.tasks.ProcessResources plugins { java } tasks { "processResources"(ProcessResources::class) { filesMatching("application.properties") { expand(project.properties) } } }
并且:
val processResources by tasks.getting(ProcessResources::class) { filesMatching("application.properties") { expand(project.properties) } }
3条答案
按热度按时间wlzqhblo1#
为什么不直接用"withType"呢?我只是说(恕我直言)
看起来比
所以,
使用新版本,您可以执行以下操作:
或
生成的访问器是"懒惰的",因此它具有所有的优点,没有缺点。
0kjbasz62#
我认为任务应该如下所示:
编辑:根据gradle/kotlin-dsl存储库中的此注解。任务配置应按以下方式工作:
这是相当丑陋的。所以我建议以下效用函数为这个目的,直到一个上游完成:
khbbv19g3#
随着KotlinDSL和Gradle新版本中API的更新,您可以执行以下操作:
并且: