ant的mkdir失败了。 我该如何处理这个错误
我有的ANT构建脚本执行以下操作:
- 在Windows服务器上执行构建并压缩二进制文件
- 使用
net use
具有不同凭据的网络驱动器映射到本地驱动器(ex P 🙂 - 我正在使用
在已安装的驱动器上创建目录(P 🙂
- 将二进制文件复制到该驱动器
下面是我的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”
这是我解决它的方式:
- 打开build.properties文件(实际打开从build.xml引用的所有属性文件)
- 检查文件任何行上的任何尾随空格和制表符。
- 在文件末尾添加一个空行。