8

我在基于 groovy 的构建脚本中有以下内容。如何在基于 kotlin 的脚本中做同样的事情?

processResources {

    filesMatching('application.properties'){
        expand(project.properties)
    }

}
4

3 回答 3

18

为什么不只使用“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 {} }

生成的访问器是“懒惰的”,因此它具有所有优点并且没有缺点。

于 2018-01-13T16:11:46.317 回答
10

我认为任务应该是这样的:

编辑:根据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()
}
于 2016-10-18T06:29:29.170 回答
9

随着更新版本的 Kotlin DSL 和 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)
  }
}
于 2017-09-09T01:58:31.277 回答