我在基于groovy的构建脚本中具有以下内容。如何在基于kotlin的脚本中执行相同的操作?如何在Gradle Kotlin构建中配置processResources任务
processResources {
filesMatching('application.properties'){
expand(project.properties)
}
}
我在基于groovy的构建脚本中具有以下内容。如何在基于kotlin的脚本中执行相同的操作?如何在Gradle Kotlin构建中配置processResources任务
processResources {
filesMatching('application.properties'){
expand(project.properties)
}
}
我想任务应该是这样的:
编辑:根据本comment在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()
}
随着在科特林DSL和摇篮的较新版本更新的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)
}
}
为什么不只是使用“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)
}
}
这看起来像它应该工作,但我得到一个错误。我认为这可能是一个错误。记录在这里:https://discuss.gradle.org/t/in-gradle-script-kotlin-tasks-getbyname-with-closure-errors-with-value-is-null/20065/1 –
请检查是否我的更新适合你 – IRus
这似乎工作。非常感谢。 –