Gradle 梯度复制任务的最新确定

Gradle 梯度复制任务的最新确定,gradle,Gradle,我对gradle比较陌生,正在尝试设置备份任务。我有几个例子,首先我将描述目标: 我在一个目录中有许多文件(称之为“数据目录”)。当修改此数据目录中任何文件的内容时,我希望在“备份位置”中创建一个新目录,并将数据目录中的每个文件复制到刚刚创建的目录中。创建的目录名称将包含当前日期和时间。目前,数据目录不包含子目录 当“数据目录”包含一个文件时,我可以很好地工作,我只想重命名该文件以包含日期。例如: task copyDocs(type: Copy) { from 'src/main/do

我对gradle比较陌生,正在尝试设置备份任务。我有几个例子,首先我将描述目标:

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

当“数据目录”包含一个文件时,我可以很好地工作,我只想重命名该文件以包含日期。例如:

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的信息,因为它似乎是一个有效的现代构建系统

关于
复制
任务,是否执行该任务取决于配置阶段设置的任务输入和输出(请参阅)。由于在配置阶段,每次输出都不同:

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
    }
}

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

我接受此答案,因为它解决了问题的关键部分。我希望gradle是如何决定这一点的,在内部,我确信这一点是显而易见的,但就我读过的文档的页数而言,答案很难找到。最后,我必须调用FileCopyDetails的文档,我发现setPath()的文档具有严重的误导性,它不仅更改了包含该文件的目录,而且还用于设置该文件的完整路径。发现这一点花了很长时间来确认答案是否有效。再次感谢你的回答,让它发挥作用对我来说是一件大事。很抱歉,我花了这么长时间才解决FileCopyDetails的问题,否则我早就可以确认了。不用担心@user1445967,很高兴你终于解决了!