我在基於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
這似乎工作。非常感謝。 –