我有一个多项目gradle构建,它将一些源文件从父项目复制到构建目录中,然后尝试覆盖其中一个复制文件中的令牌。一切运行正常,但文件最终为空。这是包含要替换的模板的文件片段:
---
# file: clients.yaml
#properties shared by all client machines
jmeter_version: "${jmeterVersion}"
这里是gradle.properties的片段:
jmeterVersion=3.0
这里有两个假设要做的工作
/** This task copies files from pdo-shared */
task copyFromCommonProject(type:Copy, dependsOn: configurations.commonProjectContent){
from configurations.commonProjectContent.collect{ zipTree(it) }
into "$buildDir"
/*doLast {
updateAnsibleTokens.execute()
}*/
}
task updateAnsibleTokens(type: Copy, dependsOn: copyFromCommonProject) {
from "$buildDir/commons/ansible/group_vars/clients.yml"
into "$buildDir/commons/ansible/group_vars/"
expand(jmeterVersion: "$jmeterVersion")
}
我从父项目运行gradle clean :tpcds-benchmark:updateAnsibleTokens
第一个任务复制所有文件,并按预期复制第二个不起作用的任务
请注意doLast
部分的评论。我尝试通过取消注释gradle clean :tpcds-benchmark:copyFromCommonProject
部分并从第二个任务中删除doLast
来将这两个任务作为dependsOn: copyFromCommonProject
运行
在两个实例中,client.yml最终都是空的
P.S。即使我禁用expand(jmeterVersion: "$jmeterVersion")
行,我也会收到一个空文件。通过一些更多的测试,似乎复制文件本身会生成一个空文件,所以也许我只是做错了。如果我只更改目标目录
答案 0 :(得分:1)
基本上我必须reread this manual section更好地理解生命周期。
按照我原来的例子,这2个任务将按预期工作。我开始怀疑的问题是,在从源发生实际复制之前,在配置周期中发生了复制和修改client.yml
的尝试。为第二个任务添加<<
可确保在复制原始文件后的执行周期中进行修改
/** This task copies files from pdo-shared */
task copyFromCommonProject(type:Copy, dependsOn: configurations.commonProjectContent){
from configurations.commonProjectContent.collect{ zipTree(it) }
into "$buildDir"
}
task updateAnsibleTokens(type: Copy, dependsOn: copyFromCommonProject) << {
from "$buildDir/commons/ansible/group_vars/clients.yml"
into "$buildDir/commons/ansible/group_vars/"
expand(jmeterVersion: "$jmeterVersion")
}
答案 1 :(得分:0)
我不确定,为什么添加<<
有帮助。然而,在提取存档时进行扩展感觉更自然:
task copyFromCommonProject(type:Copy, dependsOn: configurations.commonProjectContent) {
from configurations.commonProjectContent.collect {
zipTree(it)
}
exclude "commons/ansible/group_vars/clients.yml"
with copySpec {
from configurations.commonProjectContent.collect {
zipTree(it)
}
include "commons/ansible/group_vars/clients.yml"
expand(jmeterVersion: "$jmeterVersion")
}
into "$buildDir"
}