ant的mkdir失败了。 我该如何处理这个错误

我有的ANT构建脚本执行以下操作:

  1. 在Windows服务器上执行构建并压缩二进制文件
  2. 使用net use具有不同凭据的网络驱动器映射到本地驱动器(ex P 🙂
  3. 我正在使用在已安装的驱动器上创建目录(P 🙂
  4. 将二进制文件复制到该驱动器

下面是我的mkdir代码

 Creating ${buildRequesterUserId} folder at mirroring site starts  Creating ${buildRequesterUserId} folder at mirroring site ends 

有时候文件夹的创建工作,有些时候失败并出现以下错误

creation was not successful for an unknown reason ,并使构建失败

此错误随机发生。 Mkdir工作了一段时间。 我不确定它为什么会失败并且不确定它是否因为网络滞后而导致

我试图创建的目录可能已经存在,也可能不存在。 我读到如果目录已存在,mkdir不会做任何事情

我检查了mkdir没有failonerror 。 我不希望构建因此而失败。

我已经处理了copy部分中的错误,但不知道如何处理这个mkdir

我怎样才能做到这一点? 任何帮助,将不胜感激

问候

KARTHIK

Apache Ant Mkdir任务调用File.mkdirs()方法,该方法容易受到竞争条件的影响 。

File.mkdirs()不是primefaces操作 – 我猜它是作为一系列mkdir调用实现的。

在远程filsystem的情况下,您的主机很可能在File.mkdirs()操作过程中意识到文件系统更改,并且它失败。

Ant似乎试图解决它,因为Mkdir代码在1.8.0中已经改变了

 boolean result = mkdirs(dir); if (!result) { String msg = "Directory " + dir.getAbsolutePath() + " creation was not successful for an unknown reason"; throw new BuildException(msg, getLocation()); } 

1.8.2中的这个

 boolean result = mkdirs(dir); if (!result) { if (dir.exists()) { log("A different process or task has already created " + "dir " + dir.getAbsolutePath(), Project.MSG_VERBOSE); return; } String msg = "Directory " + dir.getAbsolutePath() + " creation was not successful for an unknown reason"; throw new BuildException(msg, getLocation()); } 

也许升级到最新的Ant可能会有所帮助?

如果不是 – 可以使用您自己的execute()方法实现创建一些powershellMkdir任务扩展。

如果没有 – 来自Ant Contrib的Trycatch任务将起作用。

对我来说,我对1.9版本的ant也有类似的问题。

我正在删除一个目录并立即重新创建它:

   

即使目录是本地的(不是网络驱动器),在两个操作之间添加1秒的睡眠也为我解决了问题:

    

您可以使用COPY任务创建目录(包含子目录)。

对我来说,修复linux中的问题就像运行sudo用户一样简单

“sudo ant”

这是我解决它的方式:

  1. 打开build.properties文件(实际打开从build.xml引用的所有属性文件)
  2. 检查文件任何行上的任何尾随空格和制表符。
  3. 在文件末尾添加一个空行。