无法扩展 Gradle 任务
Not able to extend a Gradle task
我是 Gradle 的新手(我们正在从 SBT 切换过来)并使用它来构建使用 Play Framework 制作的应用程序。
我需要在 Gradle 处理它们之前对资源添加一些过滤(我想将一些构建属性注入到配置中以使其在代码中可用)。
我已经设法 "extend" java processResources 任务,但是,出于某种原因,我无法对 play processPlayBinaryPlayResources 执行同样的操作。
processPlayBinaryPlayResources {
filter ReplaceTokens, tokens: [
"applicationVersion": version
]
}
即使这样也行不通:
def playVersion = "2.6.20"
def scalaVersion = "2.12"
def javaVersion = "1.8"
apply plugin: "java"
apply plugin: "idea"
apply plugin: "play"
model {
components {
play {
platform play: playVersion, scala: scalaVersion, java: javaVersion
injectedRoutesGenerator = true
}
}
}
processPlayBinaryPlayResources {
doLast {
println("ok")
}
}
dependencies {
compile "io.vavr:vavr:0.9.2"
compile "org.imgscalr:imgscalr-lib:4.2"
compile "com.typesafe.play:play-guice_${scalaVersion}:2.6.20"
compile "com.typesafe.akka:akka-http_${scalaVersion}:10.1.5"
compile "com.typesafe.play:filters-helpers_${scalaVersion}:2.6.20"
compile "ch.qos.logback:logback-classic:1.2.3"
}
它产生:
> Could not find method processPlayBinaryPlayResources() for arguments [build_6grwx7eowye82rdqpu4qlinur$_run_closure2@582d9dbd] on root project 'myproject' of type org.gradle.api.Project.
知道为什么吗?
您找到任务 processPlayBinaryPlayResources
的假设是基于 java 插件自动为所有设置为 process<sourceset_name>Resources
的源添加 processResources 任务。只有在使用 java pugins sourceSets
方法添加源集时才会发生这种情况,在这种情况下 PlayBinaryPlay
不是。 play 插件使用它自己的 DSL 来配置源集。
因此,当您尝试扩展 processPlayBinaryPlayResources
时,它不会发生,因为首先不存在具有该名称的此类任务,因此在将其委托给 Project
时,您最终会得到这个
Could not find method processPlayBinaryPlayResources() for arguments [build_6grwx7eowye82rdqpu4qlinur$_run_closure2@582d9dbd] on root project 'myproject' of type org.gradle.api.Project.
最后补充一点,processPlayBinaryPlayResources
任务不是play插件添加的
我是 Gradle 的新手(我们正在从 SBT 切换过来)并使用它来构建使用 Play Framework 制作的应用程序。
我需要在 Gradle 处理它们之前对资源添加一些过滤(我想将一些构建属性注入到配置中以使其在代码中可用)。
我已经设法 "extend" java processResources 任务,但是,出于某种原因,我无法对 play processPlayBinaryPlayResources 执行同样的操作。
processPlayBinaryPlayResources {
filter ReplaceTokens, tokens: [
"applicationVersion": version
]
}
即使这样也行不通:
def playVersion = "2.6.20"
def scalaVersion = "2.12"
def javaVersion = "1.8"
apply plugin: "java"
apply plugin: "idea"
apply plugin: "play"
model {
components {
play {
platform play: playVersion, scala: scalaVersion, java: javaVersion
injectedRoutesGenerator = true
}
}
}
processPlayBinaryPlayResources {
doLast {
println("ok")
}
}
dependencies {
compile "io.vavr:vavr:0.9.2"
compile "org.imgscalr:imgscalr-lib:4.2"
compile "com.typesafe.play:play-guice_${scalaVersion}:2.6.20"
compile "com.typesafe.akka:akka-http_${scalaVersion}:10.1.5"
compile "com.typesafe.play:filters-helpers_${scalaVersion}:2.6.20"
compile "ch.qos.logback:logback-classic:1.2.3"
}
它产生:
> Could not find method processPlayBinaryPlayResources() for arguments [build_6grwx7eowye82rdqpu4qlinur$_run_closure2@582d9dbd] on root project 'myproject' of type org.gradle.api.Project.
知道为什么吗?
您找到任务 processPlayBinaryPlayResources
的假设是基于 java 插件自动为所有设置为 process<sourceset_name>Resources
的源添加 processResources 任务。只有在使用 java pugins sourceSets
方法添加源集时才会发生这种情况,在这种情况下 PlayBinaryPlay
不是。 play 插件使用它自己的 DSL 来配置源集。
因此,当您尝试扩展 processPlayBinaryPlayResources
时,它不会发生,因为首先不存在具有该名称的此类任务,因此在将其委托给 Project
时,您最终会得到这个
Could not find method processPlayBinaryPlayResources() for arguments [build_6grwx7eowye82rdqpu4qlinur$_run_closure2@582d9dbd] on root project 'myproject' of type org.gradle.api.Project.
最后补充一点,processPlayBinaryPlayResources
任务不是play插件添加的