2016-10-17 71 views

回答

3

我想任務應該是這樣的:

編輯:根據本commentgradle/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() 
} 
+0

這看起來像它應該工作,但我得到一個錯誤。我認爲這可能是一個錯誤。記錄在這裏:https://discuss.gradle.org/t/in-gradle-script-kotlin-tasks-getbyname-with-closure-errors-with-value-is-null/20065/1 –

+0

請檢查是否我的更新適合你 – IRus

+0

這似乎工作。非常感謝。 –

3

隨着在科特林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) 
    } 
} 
0

爲什麼不只是使用「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) 
    } 
} 
相關問題