File io 渐变复制创建一个空文件

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 这里有两个任务可以实现这个目的

我有一个多项目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")
}
我以
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"
}