我有一个任务需要将在执行阶段创建的文件(它们是 gcov 单元测试阶段的产物)复制到另一个目录中。目前,我的代码只会在第二次执行时正确执行(即在创建目录结构中的文件时)。然而,第一次,我收到“正在跳过任务,没有源文件”的调试消息。
task copyGcovObj(type: Copy, dependsOn: 'test') {
description "Copies gcov files into build/testOutput directory."
from fileTree(dir: "$buildDir/objectFiles", includes: ["**/*.gcno", "**/*.gcda"]).files
into ("$buildDir/testOutput")
}
代码取自此处: Flat copy 。所指的任务“测试”是执行单元测试的任务。
我认为问题是在配置阶段,没有文件可以复制,所以 Gradle 跳过了这个任务。如果第二次执行,Gradle 会看到有文件,因此执行副本。我怎样才能让 Gradle 执行复制,但要复制的文件是在执行阶段确定的?
最佳答案
from
和 into
接受闭包来推迟对参数的评估,所以这应该有帮助:
from { fileTree(...).files }
关于Gradle 文件树懒惰的平面复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24149510/