File io 渐变复制创建一个空文件
我有一个多项目gradle构建,它将父项目中的一些源文件复制到构建目录中,然后尝试覆盖其中一个复制文件中的令牌。一切运行正常,但文件最终为空。以下是要替换的模板的文件片段:File io 渐变复制创建一个空文件,file-io,gradle,File Io,Gradle,我有一个多项目gradle构建,它将父项目中的一些源文件复制到构建目录中,然后尝试覆盖其中一个复制文件中的令牌。一切运行正常,但文件最终为空。以下是要替换的模板的文件片段: --- # file: clients.yaml #properties shared by all client machines jmeter_version: "${jmeterVersion}" 下面是gradle.properties的片段: jmeterVersion=3.0 这里有两个任务可以实现这个目的
---
# 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")
}
我以gradleclean:tpcds benchmark:updateAnsibleTokens
第一个任务复制所有文件,第二个任务不起作用
请注意注释掉的doLast
部分。通过取消对doLast
部分的注释并从第二个任务中删除dependsOn:copyFromCommonProject
,我尝试将这两个任务作为gradle clean:tpcds benchmark:copyFromCommonProject
运行
在这两种情况下,client.yml最终都是空的
p.S.即使我禁用了expand(jmeterVersion:“$jmeterVersion”)
行,我也会得到一个空文件。通过更多的测试,似乎在自身上复制文件会生成一个空文件,所以可能我只是做错了。如果我只更改目标目录,那么我拥有的相同代码也会起作用。基本上,我必须更好地理解生命周期
按照我最初的示例,这里有两个任务将按预期工作。我开始怀疑的问题是,复制和修改
client.yml
的尝试发生在配置周期中,而不是从源代码进行实际复制。添加我不确定,为什么添加第二个任务看起来像是试图将文件复制到自身上(源和目标指向同一个文件)。是有意的吗?是的。原始文件包含一个令牌,该令牌需要作为第二次更新的结果进行更新task@NikitaSkvortsov请参阅原始邮件中的P.S。将简短地添加答案在这种特殊情况下,如果我跳过,您不需要,那么将Copy
类型分配给此任务是没有意义的-最好只使用在项目实例上调用的Copy{}
方法。我对Gradle的经验有限,欢迎你回答这个问题,如果你的一种方法有效,我很乐意接受刚才的回答。结果是空组_varsfolderi认为让我困惑的是,在评估阶段没有进行复制,基于我有限的知识(和测试),我唯一能说的是我的解决方案有效,而你的解决方案无效
/** 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")
}
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"
}