';gradle clean';似乎杀死了我的目标目录
当我把一份自定义的工作与Gradle的';gradle clean';似乎杀死了我的目标目录,gradle,Gradle,当我把一份自定义的工作与Gradle的clean工作结合起来时,我正在努力克服效果。在讨论任何细节之前,这里有一个简单的观察: $gradle-clean;gradle myJob有效! $gradle clean myJob失败! 使用--stacktrace运行第二次调用会显示NoSuchFile异常 以下是myJob的要点(这是原始作业的一个稍微简化的版本,取自内存,因此请原谅一些小故障): 任务myJob{ 多拉斯特{ Files.createDirectories(path.get(
clean
工作结合起来时,我正在努力克服效果。在讨论任何细节之前,这里有一个简单的观察:
$gradle-clean;gradle myJob有效!
$gradle clean myJob失败!
使用--stacktrace
运行第二次调用会显示NoSuchFile
异常
以下是myJob
的要点(这是原始作业的一个稍微简化的版本,取自内存,因此请原谅一些小故障):
任务myJob{
多拉斯特{
Files.createDirectories(path.get(“$buildDir/tmp1”))
configurations.someConfiguration.collect{
zipTree(it).匹配{
包括一些模式
}
}.files.each{coll->
每种颜色{
文件.copy(
获取(it.path),
get(“$buildDir/tmp1”,“foo”),
StandardCopyOption。替换(现有)
}
}
}
}
我发现myJob
在build
下使用一个目标目录,它是一个递归删除的目录clean
。在组合调用两个任务之后,当异常发生时,build/tmp1
可证明不存在
我不明白的是,Files.createDirectories()
调用(我在执行时间块中小心使用)在这种情况下似乎没有创建目标目录。否则,目录会立即被删除
但是使用--debug
运行组合调用表明clean
作业在启动myJob
之前执行并终止(至少根据相应消息流经过的顺序和时间戳)
那么,为什么开始复制时,build/tmp1
会丢失呢?
我能做些什么来防止这种情况发生
[这是Gradle 2.3]根据@ReneGroeschke关于输出目录的提示,此版本适用于我的环境:
任务myJob{
outputs.files文件(“$buildDir/tmp1”)//
每种颜色{
文件.copy(
获取(it.path),
get(“$buildDir/tmp1”,“foo”),
StandardCopyOption。替换(现有)
}
}
}
}
注意任务配置部分中的附加outputs.files
条目
有几件事仍然困扰着我:
- 无论是在
文件中逐字使用,还是在“应用”的二进制插件中使用,代码的行为都不同。(对于二进制版本,您需要一些调整,例如在一些方法调用前面加上build.gradle
)项目。
- 我仍然需要doLast块中的
调用。我原以为这会是多余的Files.createDirectories()
- 运行多个任务时,
排序的各种应用程序都没有帮助.mustRunAfter
- 调试日志(如问题中所述)没有给出任务以某种方式重叠的任何线索
任务myJob{
outputs.files文件(“$buildDir/tmp1”)//
每种颜色{
文件.copy(
获取(it.path),
get(“$buildDir/tmp1”,“foo”),
StandardCopyOption。替换(现有)
}
}
}
}
注意任务配置部分中的附加outputs.files
条目
有几件事仍然困扰着我:
- 无论是在
文件中逐字使用,还是在“应用”的二进制插件中使用,代码的行为都不同。(对于二进制版本,您需要一些调整,例如在一些方法调用前面加上build.gradle
)项目。
- 我仍然需要doLast块中的
调用。我原以为这会是多余的Files.createDirectories()
- 运行多个任务时,
排序的各种应用程序都没有帮助.mustRunAfter
- 调试日志(如问题中所述)没有给出任务以某种方式重叠的任何线索
myJob
任务必须在clean
之后运行-配置它。@Opal一个简单的myJob.mustRunAfter clean
没有帮助。这不是对您的问题的真正答案,但是:您是否运行了文件监视工具来确定文件/目录是否按顺序访问你在查看日志文件时会假设?在Windows上,您可以使用procmon来完成此操作。@Marged感谢您的提示,我们将尝试使用它。您的示例代码不能作为文件使用。CreateDirectory()使用不同的参数。如果你能提供一个可复制的例子,我可以告诉你这里发生了什么。我的假设是,在创建$buildDir目录之前,您尝试在$buildDir目录中创建一个文件。请记住,如果您按原样运行任务,而没有调用其他任务。buildDir将不会为您和您装箱