gpt4 book ai didi

file-io - Gradle副本创建一个空文件

转载 作者:行者123 更新时间:2023-12-03 04:01:42 25 4
gpt4 key购买 nike

我有一个多项目gradle构建,该构建将某些源文件从父项目复制到构建目录,然后尝试覆盖其中一个复制文件中的 token 。一切正常,但文件最终为空。这是带有要替换的模板的文件片段:

---
# 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")行,我也会得到一个空文件。经过更多的测试,似乎在其自身上复制文件将生成一个空文件,因此也许我只是在做错了。如果仅更改目标目录,则具有的相同代码将起作用

最佳答案

基本上,我必须reread this manual section才能更好地了解生命周期。

在我的原始示例之后,这是两个可以按预期运行的任务。我开始怀疑的问题是,在从源进行实际复制之前,在配置周期中正在尝试复制和修改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")
}

关于file-io - Gradle副本创建一个空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38463095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com