我有的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>
Run Code Online (Sandbox Code Playgroud)
有时候文件夹的创建工作,有些时候失败并出现以下错误
creation was not successful for an unknown reason 并使构建失败
此错误随机发生.Mkdir工作了一段时间.我不确定为什么它会失败并且不确定它是否因为网络滞后而导致
我试图创建的目录可能已经存在,也可能不存在.我读到如果目录已存在,mkdir不会执行任何操作
我检查failonerror了mkdir 没有.我不希望构建因此而失败.
我已经copy部分处理了错误,但不知道如何处理这个错误mkdir
我怎样才能做到这一点?任何帮助,将不胜感激
问候
KARTHIK
Apache AntMkdir任务正在调用容易受到竞争条件影响的File.mkdirs()方法。
File.mkdirs()不是原子操作 - 我猜它是作为一系列mkdir调用来实现的。
如果是远程文件系统,您的主机很有可能在操作过程中意识到文件系统的更改,File.mkdirs()并且会失败。
Ant 似乎试图修复它,因为1.8.0Mkdir中的代码已更改
boolean result = mkdirs(dir);
if (!result) {
String msg = "Directory " + dir.getAbsolutePath()
+ " creation was not successful for an unknown reason";
throw new BuildException(msg, getLocation());
}
Run Code Online (Sandbox Code Playgroud)
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());
}
Run Code Online (Sandbox Code Playgroud)
那么升级到最新的 Ant 可能会有帮助吗?
Mkdir如果没有 -可以使用您自己的方法实现来创建一些强力任务扩展execute()。
如果没有 - Ant Contrib 的Trycatch 任务将起作用。
| 归档时间: |
|
| 查看次数: |
13235 次 |
| 最近记录: |