当 apply plugin: 'java'
在 Gradle 中时,它在其他任务中定义了 processResources
。
我想在 processResources
期间替换其中一个资源文件中的 token /参数。
我的 build.gradle
中定义了以下复制任务:
import org.apache.tools.ant.filters.ReplaceTokens
task initConfig(type: Copy) {
from("src/resources/assets/js") {
include 'config.js'
filter(ReplaceTokens, tokens: [host: "${System.env.HOST ?: 'localhost:58080'}" as String])
}
into "$sourceSets.main.output.resourcesDir/assets/js"
}
如果我运行 gradle -q run initConfig
,它工作正常。
我想要的是此任务作为 processResources
任务的一部分运行,我尝试将相同的逻辑放入以下内容:
processResources << {
// same code goes here
}
或
processResources {
doLast {
// same code goes here
}
}
它们都不起作用。因此,如果运行 gradle -q clean processResources
资源被复制,但 token 没有被替换。
我不想在运行构建时强制显式运行/添加 initConfig
,所以理想情况下 gradle -q build
应该做所有必要的事情。
我相信这是可能的,因为 build
任务本身定义了在执行期间运行多个任务的方式。还没有找到方法。
最佳答案
processResources
是(您可以在 docs 中查看)Copy
类型的普通任务。因此,您可以按照与配置其他复制任务完全相同的方式对其进行配置。这足以过滤文件:
import org.apache.tools.ant.filters.ReplaceTokens
apply plugin: 'java'
processResources {
filter(ReplaceTokens, tokens: ['token.to.replace': 'zombo.com'])
}
Here你可以找到一个简单的演示。
关于java - 修改现有的 gradle 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32898508/