我的ANT构建脚本执行以下操作:
net use
<mkdir>
在已安装的驱动器(P :) 以下是mkdir
<echo>Creating ${buildRequesterUserId} folder at mirroring site starts</echo>
<mkdir dir="P:\build_output\${buildRequesterUserId}"/>
<echo>Creating ${buildRequesterUserId} folder at mirroring site ends</echo>
有时候文件夹的创建有效,有些时候失败并出现以下错误
creation was not successful for an unknown reason
并使构建失败
此错误随机发生。 Mkdir工作了一段时间。我不确定它为什么会失败并且不确定它是否因为网络滞后而
我正在尝试创建的目录可能已经存在,也可能不存在。我读到如果目录已经存在,mkdir不会做任何事情
我检查过mkdir没有failonerror
。我不希望构建因此而失败。
我已处理copy
部分中的错误,但不确定如何处理此mkdir
我怎样才能做到这一点?任何帮助将不胜感激
此致
KARTHIK
答案 0 :(得分:2)
Apache Ant Mkdir
任务正在调用File.mkdirs()
方法vulnerable to race conditions。
File.mkdirs()
不是原子操作 - 我猜它是作为一系列mkdir
调用来实现的。
如果是远程过滤系统,您的主机很有可能在File.mkdirs()
操作过程中意识到文件系统更改,并且失败。
Ant似乎尝试修复它,因为1.8.0
中的Mkdir
代码已从此更改
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可能会有所帮助吗?
如果没有 - 可以使用您自己的Mkdir
方法实现创建一些强力execute()
任务扩展。
如果没有 - 来自Ant Contrib的Trycatch task将起作用。
答案 1 :(得分:2)
对我来说,我对1.9版本的ant有类似的问题。
我正在删除目录并立即重新创建它:
<delete dir="${jar.dir}"/>
<mkdir dir="${jar.dir}"/>
即使目录是本地的(不是网络驱动器),在两个操作之间添加1秒的睡眠也为我解决了这个问题:
<delete dir="${jar.dir}"/>
<sleep seconds="2"/>
<mkdir dir="${jar.dir}"/>
答案 2 :(得分:0)
您可以使用COPY任务创建目录(包含子目录)。
答案 3 :(得分:0)
对我来说,修复linux中的问题就像运行sudo用户一样简单
&#34; sudo ant&#34;
答案 4 :(得分:-4)
以下是我如何解决它: