如何在GradleKotlin构建中配置processResources任务

prdp8dxp  于 2023-01-20  发布在  Kotlin
关注(0)|答案(3)|浏览(241)

我在一个基于groovy的构建脚本中有以下代码。我如何在一个基于kotlin的脚本中做同样的事情呢?

processResources {

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

}
wlzqhblo

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 {} }

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

0kjbasz6

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()
}
khbbv19g

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)
  }
}

相关问题