【发布时间】:2014-05-30 12:39:42
【问题描述】:
我的 Ant 构建中出现了一个奇怪的错误。构建是这样工作的:build.xml 调用一个新的 buildTargets.xml 文件,并且在该文件中完成了大部分工作。 buildTargets.xml 在 gwt-out/htdocs/** 和另一个目录 staging/htdocs/** 中创建了一堆新文件。基本上,文件是在 gwt-out/htdocs 中创建的,然后复制到 staging/htdocs 中。错误是只有一个文件没有被复制,并且我收到 java.IO.FileNotFoundException (Access is denied) 错误。奇怪的部分是文件从构建更改为构建。
起初我认为这是一个 Eclipse 问题,所以我通过命令行构建了一个新的(与 eclipse 不同的文件)没有被放入 staging/htdocs,这产生了同样的错误。我已经用 -debug 标志附加了 Ant 所说的内容。在 buildTargets.xml 中对文件进行标记时,似乎会弹出错误。在四处搜索之后,似乎最常见的响应是修复我的权限 - 但是文件是动态创建的,当我去检查该文件时,所有权限都已启用(“特殊”除外),所以我没有认为这就是问题所在。
与我的类似的其他 SO 问题都涉及在远程服务器上构建并修复我对该服务器的权限 - 但是这都是我的计算机本地的,所以我也不确定这是否是问题。会不会是 Ant 构建中的复制任务出错?
这是错误:
BUILD FAILED
C:\CSDK\build\buildTargets.xml:253: Failed to copy C:\Users\admin\worksp
ace\BuildPortal\out\gwt-out\htdocs\war\BuildPortalTest.iOS_Bu
ild_Portal\sc\modules\ISC_DataBinding.js to C:\Users\admin\workspace\BuildPortal
\out\staging\htdocs\war\BuildPortalTest.iOS_Build_Portal\sc\m
odules\ISC_DataBinding.js due to java.io.FileNotFoundException C:\Users\admin\wo
rkspace\BuildPortal\out\staging\htdocs\war\BuildPortalTest.iO
S_Build_Portal\sc\modules\ISC_DataBinding.js (Access is denied)
at org.apache.tools.ant.taskdefs.Copy.doFileOperations(Copy.java:907)
at org.apache.tools.ant.taskdefs.Copy.execute(Copy.java:563)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav
a:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:435)
at org.apache.tools.ant.Target.performTasks(Target.java:456)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExe
cutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
at org.apache.tools.ant.Main.runBuild(Main.java:851)
at org.apache.tools.ant.Main.startAnt(Main.java:235)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
Caused by: java.io.FileNotFoundException: C:\Users\admin\workspace\BuildPortal\o
ut\staging\htdocs\war\BuildPortalTest.iOS_Build_Portal\sc\mod
ules\ISC_DataBinding.js (Access is denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
谢谢。
【问题讨论】:
-
您的机器上是否运行了防病毒软件?某些防病毒软件可能会将快速创建和删除文件视为“可疑活动”。此外,防病毒软件可能会配置为在创建文件时扫描文件,因此您的 Ant 构建可能会在防病毒软件完成之前尝试删除文件。
-
我确实知道。它是Symantec Antivirus,我知道就防病毒软件而言,它通常被认为是最“霸道”的……我会尝试将其关闭。谢谢。
-
我最终做的(如果有人发现这个奇怪的特定错误)是在 Isaac 评论它可能是 AV 之后,我决定“继续重试”,这在迄今为止的每个构建中都有效——通过围绕有问题的代码添加重试任务。我将它设置为大约 30 次重试,从那以后它就没有失败过。总的来说,如果没有 Isaac 的帮助,我不会想到解决方案(我以前从未编写过构建脚本)。