Gradle - 将文件复制到项目根目录时出错

问题描述 投票:0回答:1

每当我尝试使用复制任务将文件复制到项目的根目录(我正在运行gradle的同一文件夹)时,我收到以下错误:

无法为文件内容创建MD5哈希。

我认为这与我从Artifactory中提取的文物有关,但这似乎是无关的。我用最小的脚本得到了相同的结果。

我正在做的事情有什么明显的错误,或Gradle故意不允许这样的事情?

task fails(type:Copy) {
    from 'build/someFile.txt'
    into new File('.').absolutePath
}

task works(type:Copy) {
    from 'build/someFile.txt'
    into new File('.').absolutePath + '/output'
}
gradle
1个回答
1
投票

简答回答:不要复制到项目目录中,你最好使用into "$buildDir/someFolder",使文件夹被隔离到这个单一任务,并且还将被gradle clean清理

长答案:在它的核心,Gradle对每一项任务都有一个“UP-TO-DATE”检查的概念。如果Gradle发现自上次执行任务以来没有任何变化,它将使用旧结果而不是再次执行。

通过对任务输入和任务输出进行“散列”来实现UP-TO-DATE检查。由于您使用的是into '.',这意味着项目目录的全部内容被视为任务输出(错误)

Gradle使用.gradle文件夹作为临时文件(例如任务哈希)这可能是其中一些文件因写入而被锁定,因为Gradle正在尝试同时读取相同的文件(以计算任务输出的“哈希”),从而导致错误眼看

*编辑*

如果由于遗留原因需要复制到项目目录中,可以直接使用Project.copy(...)而不是Copy任务。在这种情况下,您可以手动管理任务输入/输出

例如

task customCopy {
    inputs.file "$buildDir/someFile.txt"
    outputs.file 'someFile.txt'
    doLast {
        copy {
            from "$buildDir/someFile.txt"
            into '.'
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.