如何在 Gradle Kotlin 构建中配置 processResources 任务
How to configure the processResources task in a Gradle Kotlin build
我在基于 groovy 的构建脚本中有以下内容。我如何在基于 kotlin 的脚本中执行相同的操作?
processResources {
filesMatching('application.properties'){
expand(project.properties)
}
}
我认为任务应该是这样的:
编辑:根据此 comment in 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()
}
随着更新版本的 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)
}
}
为什么不直接使用 "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 {} }
生成的访问器是 "lazy",因此它具有所有优点而没有缺点。
我在基于 groovy 的构建脚本中有以下内容。我如何在基于 kotlin 的脚本中执行相同的操作?
processResources {
filesMatching('application.properties'){
expand(project.properties)
}
}
我认为任务应该是这样的:
编辑:根据此 comment in 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()
}
随着更新版本的 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)
}
}
为什么不直接使用 "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 {} }
生成的访问器是 "lazy",因此它具有所有优点而没有缺点。