Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
';gradle clean';似乎杀死了我的目标目录_Gradle - Fatal编程技术网

';gradle clean';似乎杀死了我的目标目录

';gradle clean';似乎杀死了我的目标目录,gradle,Gradle,当我把一份自定义的工作与Gradle的clean工作结合起来时,我正在努力克服效果。在讨论任何细节之前,这里有一个简单的观察: $gradle-clean;gradle myJob有效! $gradle clean myJob失败! 使用--stacktrace运行第二次调用会显示NoSuchFile异常 以下是myJob的要点(这是原始作业的一个稍微简化的版本,取自内存,因此请原谅一些小故障): 任务myJob{ 多拉斯特{ Files.createDirectories(path.get(

当我把一份自定义的工作与Gradle的
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
    排序的各种应用程序都没有帮助
  • 调试日志(如问题中所述)没有给出任务以某种方式重叠的任何线索

根据@ReneGroeschke关于输出目录的提示,此版本适用于我的环境:

任务myJob{
outputs.files文件(“$buildDir/tmp1”)//
每种颜色{
文件.copy(
获取(it.path),
get(“$buildDir/tmp1”,“foo”),
StandardCopyOption。替换(现有)
}
}
}
}
注意任务配置部分中的附加
outputs.files
条目

有几件事仍然困扰着我:

  • 无论是在
    build.gradle
    文件中逐字使用,还是在“应用”的二进制插件中使用,代码的行为都不同。(对于二进制版本,您需要一些调整,例如在一些方法调用前面加上
    项目。
  • 我仍然需要doLast块中的
    Files.createDirectories()
    调用。我原以为这会是多余的
  • 运行多个任务时,
    .mustRunAfter
    排序的各种应用程序都没有帮助
  • 调试日志(如问题中所述)没有给出任务以某种方式重叠的任何线索

这不是对您问题的真正回答,但是:您是否运行了一个文件监控工具,以确定文件/目录是否按照您在查看日志文件时假定的顺序访问?在Windows上,您可以使用procmon来完成此操作。@Marged感谢您的提示,我们将尝试使用它。您的示例代码不能作为文件使用。CreateDirectory()使用不同的参数。如果你能提供一个可复制的例子,我可以告诉你这里发生了什么。我的假设是,在创建$buildDir目录之前,您尝试在$buildDir目录中创建一个文件。请记住,如果您按原样运行任务,而没有调用其他任务。buildDir不会为您装箱,您必须提前创建它。或者标记“$buildDir/tmp1”作为任务输出目录,gradle将为您创建它。另外,
myJob
任务必须在
clean
之后运行-配置它。@Opal一个简单的
myJob.mustRunAfter clean
没有帮助。这不是对您的问题的真正答案,但是:您是否运行了文件监视工具来确定文件/目录是否按顺序访问你在查看日志文件时会假设?在Windows上,您可以使用procmon来完成此操作。@Marged感谢您的提示,我们将尝试使用它。您的示例代码不能作为文件使用。CreateDirectory()使用不同的参数。如果你能提供一个可复制的例子,我可以告诉你这里发生了什么。我的假设是,在创建$buildDir目录之前,您尝试在$buildDir目录中创建一个文件。请记住,如果您按原样运行任务,而没有调用其他任务。buildDir将不会为您和您装箱