eclipse ant build failed 无法删除文件 lib\build
Posted
技术标签:
【中文标题】eclipse ant build failed 无法删除文件 lib\\build【英文标题】:eclipse ant build failed Unable to delete file lib\buildeclipse ant build failed 无法删除文件 lib\build 【发布时间】:2013-06-01 11:29:17 【问题描述】:在运行某些 build.xml 目标时,清理会在删除 ivy jar 目录时遇到问题。 “锁定”文件是由 Eclipse 使用的,在目录上使用资源管理器或从 Eclipse 重新运行 ant 拒绝删除它,直到重新启动 Eclipse。这是非常耗时的。 运行 ant build/clean 后,eclipse 保留此文件的某些原因。 这不是所有的项目,只是在某些时候出于未知的原因。
有这个现有的讨论。 Eclipse won't delete files
但它并没有回答我关于如何让 eclipse 运行 ant 而不必每次都重新启动的问题。
有没有办法使用 eclipse -console 来查看文件句柄是什么?或者是否有人知道为什么 eclipse/ant/ivy 在构建或两个构建后不会放弃这些目标的根本原因(在 Eclipse 重新启动后的第一次工作正常)但随后的一些后续 ant 构建变得不开心。
在我的情况下,确定锁定文件的是 eclipse。 重新启动 Eclipse 不是解决方案。否则,我将返回命令行窗口。我试过在同一个 jvm 中设置运行,以及各种设置。
我需要调试 Eclipse 插件吗?有没有更简单的方法来找出 Eclipse 及其插件中没有释放锁的内容?这是我第一次看到这种情况,我怀疑是常春藤引起的。
运行 juno、ivy、spring、ant 并在从 Eclipse 中 run-as Ant Build 时出现问题,即 clean 无法删除工件的 lib/build 目录。
eclipse.buildId=M20130204-1200
java.version=1.6.0_43
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US
Framework arguments: -product org.eclipse.epp.package.jee.product
Command-line arguments: -os win32 -ws win32 -arch x86 -product org.eclipse.epp.package.jee.product
!ENTRY org.apache.ivyde.eclipse 1 0 2013-06-04 11:36:50.344
!MESSAGE starting IvyDE plugin
蚂蚁目标:
<target name="clean-retrieved" >
<delete includeemptydirs="true" >
<fileset dir="$basedir">
<include name="lib/**" />
</fileset>
</delete>
</target>
错误:
clean-retrieved:
BUILD FAILED
C:\scripts\common-build-targets.xml:238: Unable to delete file C:\scripts\lib\build\annotations-1.3.8.jar <<just first jar file in directory..
【问题讨论】:
Windows?如果在目录中打开任何文件,windows 将拒绝删除。操作系统级别错误。 这不是错误。这是一条消息,文件已锁定。 Eclipse-ant 会锁定文件,除非重新启动 Eclipse,否则不会释放锁定。我认为这是eclipse ant插件中的一个错误或“错误”,它似乎与ivy依赖管理器有关,因为我在ivy集成之前从未见过这个。 更有可能是操作系统问题,当然这是我的经验。您是否有可能在常春藤设置文件中使用锁定策略?很少需要且不太可能成为根本案例:ant.apache.org/ivy/history/latest-milestone/settings/… 根据我的 Kepler 经验,它会锁定项目类路径中提到的 jar。您不需要实际运行任何进程来实现锁。我经常不得不停止 Eclipse 并在命令窗口中运行 ant 任务。我不知道使用 SysInternals handle.exe 杀死问题 jar 文件的句柄是否容易,但我认为这需要提升用户权限,这很可能是个问题。 【参考方案1】:当进程正在使用所述文件时会发生这种情况。当使用所述 jar 的程序仍在运行时,我通常会发生此问题。验证您是否仍在 Eclipse 中运行您的程序。从视觉上看,最简单的方法是看这个:
启用红色方块(停止按钮)意味着您的程序仍在运行。如果你按下它,你将停止你的进程。但是,如果您的程序没有运行,它看起来像这样:
由于没有启用“停止”按钮,这意味着程序没有运行。但是,除了当时显示的进程之外,可能还有其他进程也在运行。要看到这一点,您可以在下一个屏幕截图中看到“计算机屏幕”图标:
启用的计算机屏幕表示您已运行多个程序/进程。单击向下箭头可让您切换到其他程序。检查它们是否正在运行,并停止它们。一种更简单的方法是按下双 X 的符号。这将关闭与已完成进程相关的每个部分,并可能向您显示仍在运行的部分,您可以停止。继续按双 x 和停止按钮,直到全部消失,您应该能够删除您的 jar,并毫无问题地构建。
【讨论】:
那个很好的信息和有据可查的,但是蚂蚁进程任务已经完成了。双 XX 也不起作用。如果 ant 构建由于其他原因失败,jar 文件仍然被锁定。因此,我认为它是 eclipse ant 模块,它不能很好地处理异常,并且在 ant 插件方面存在错误。 ant-eclipse 错误跟踪器在大约 2004 年的古代显示了类似的东西......bugs.eclipse.org/bugs/show_bug.cgi?id=64713 所以它是类似的问题模式,它看起来像是如何引用 taskdef 的基线问题。解决方法可能是更改 ant 脚本(呃。) 常识:当进程正在使用所述文件时会发生这种情况。谢谢!!【参考方案2】:我已经开始在最近的 Eclipse 更新中看到这个问题。事实证明,即使在任务执行之前,ant 插件也会锁定构建文件中引用的所有 jar 文件。为了禁用这个奇怪的“功能”,我做了以下事情,问题就消失了:
-
打开菜单 Window > Preferences > Ant > Editor > Content Assist
禁用为用户定义的任务提供建议选项
重启 Eclipse
【讨论】:
谢谢!唯一对我有用的答案是,在这种情况下,重新启动 Eclipse 不是可选的,因为在此之前它不会放开文件句柄。【参考方案3】:从命令行执行下面
c:\path_to_eclipse\eclipse.exe -clean
【讨论】:
【参考方案4】:这似乎是 ant 插件的问题。就我而言,当插件解析 build.xml 文件时,它会打开我的 taskdef 元素的类路径中提到的所有 jar 的文件句柄。一旦某个操作导致 ant 插件解析 build.xml 文件,它就会获取这些 jar 的文件句柄,并且在 eclipse 关闭之前不会释放它们。我认为这是 ant 插件中的一个错误——它应该只在目标运行时保持打开的文件句柄。
除了恢复到命令行使用 ant 而不是 eclipse 插件外,我没有找到解决此问题的方法。可以重新构建整个构建以将这些 jar 的重复副本放在其他地方并更新 taskdef 目标,但这是一个严重的黑客攻击。团队中使用 mac 或 linux 的人看不到这一点,因为它们允许您删除具有打开文件句柄的文件。可以在其他地方讨论它的优点。
【讨论】:
【参考方案5】:我要在这里筹码(我知道这是一个旧帖子)
我的 Eclipse/Ant 组合工作正常,但随后我创建了一个新工作区,看起来不错,但在清理过程中拒绝删除 dist/*jars
。
我尝试通过声称它们已在 Eclipse 中打开的 Windows Explorer 删除它们。
Eclipse 重新启动有效,但耗时。
我的解决方案 - 我创建了一个新工作区并将我的项目重新导入到其中。
我的猜测 - 我原来的工作区中存在一些损坏。
【讨论】:
【参考方案6】:我也有这个问题。这是由于文件夹的权限被拒绝而引起的。我无法切换文件夹的所有者。解决问题的方法是安装Lockhunter 解锁文件夹,删除并重新创建它。
【讨论】:
以上是关于eclipse ant build failed 无法删除文件 lib\build的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Eclipse 可能无法在 Ant 构建文件的运行选项中显示“Ant Build”?
有啥方法可以从 Eclipse 自动生成 ant build.xml 文件?