gpt4 book ai didi

gradle - Gradle Copy Task最新确定

转载 作者:行者123 更新时间:2023-12-03 03:08:15 26 4
gpt4 key购买 nike

我是新手,尝试设置备份任务。我有一些示例,首先我将描述目标:

我在目录中有许多文件(称为“数据目录”)。修改此数据目录中任何文件的内容后,我想在“备份位置”中创建一个新目录,并将数据目录中的每个文件复制到刚刚创建的目录中。创建的目录名称将包含当前日期和时间。目前,数据目录不包含任何子目录。

当“数据目录”包含一个文件,而我要做的只是将该文件重命名为包含日期时,我的工作就很好了。例:

task copyDocs(type: Copy) {
from 'src/main/doc/testfile.html'
into 'build/target/doc'

rename { String fileName ->
def date = new Date();
date.format("YYYY-MM-dd--HH-mm-ss") + " " + fileName
}
}

这很棒。我可以根据需要多次运行“copyDocs”任务,但是只有在我实际修改了testfile.html的内容后,它才会创建一个新文件。现在,我想扩展它,以便创建一个新目录并将源文件复制到该目录中,而不是创建一个被重命名的新文件。
task copyDocs(type: Copy) {

def dateStr = (new Date()).format("YYYY-MM-dd--HH-mm-ss");
from 'src/main/doc/testfile.html'
into 'build/target/doc/' + dateStr

}

效果不是这么好。尽管创建的目录具有我想要的名称,但问题是每次我运行任务时,它都会创建一个新目录并将 testfile.html复制到该目录中,而不管该文件是否被修改。

我知道这与“任务输入”等有关,我已经阅读了文档中描述初始化阶段与配置阶段等部分。我还没有发现足够具体的信息来帮助我理解为什么复制任务认为在第二种情况下需要重新运行它,而在第一种情况下不需要。

简而言之,在两种情况下,每次运行任务时,潜在的输出文件都会根据日期/时间而变化。在任何一个任务的情况下,输入文件都不会更改。那么,为什么第二次任务需要每次都重新运行,而不是第一次运行?有没有一种简单的方法可以“调试” gradle,使其明确告诉我为什么?

非常感谢您的时间和帮助,我有兴趣学习有关gradle的更多信息,因为这似乎是一个有效的现代构建系统!

最佳答案

对于copy任务,是否执行将由在配置阶段设置的任务输入和输出确定(请参阅here)。由于在配置阶段每次输出都不同:

into 'build/target/doc/' + dateStr

(取决于秒,但是如果修剪成小时,几天,几个月,效果是一样的,但更罕见),即使任务没有更改,每次执行任务时也会复制该文件。要解决此问题,您需要在执行时更改目标,可以通过以下方式完成:
task copyDocs(type: Copy) {

def dest = 'build/target/doc/'
from 'src/main/doc/testfile.html'
into dest
eachFile { fcp ->
def dateStr = (new Date()).format("YYYY-MM-dd--HH-mm-ss");
fcp.path = dest + dateStr
}
}

仅当 from输入不同时,才会执行此任务。

关于gradle - Gradle Copy Task最新确定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42961648/

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