2013-06-05 215 views
4

运行某些build.xml目标时,clean在删除ivy jar目录时遇到了点击或错过。 “锁定”文件是通过eclipse,在目录上使用浏览器或从eclipse重新运行ant拒绝删除它直到重新启动eclipse。这非常耗时。 运行ant build/clean后,eclipse在这些文件中保留的一些原因。
这不是所有的项目,只是在某些时候,原因不明。eclipse ant编译失败无法删除文件lib build

有这个现有的讨论。 Eclipse won't delete files

但它并没有回答我的问题如何让eclipse运行ant而不必每次都重新启动。

有没有一种方法可以使用eclipse -console来查看文件处理的内容?或者是否有人知道为什么eclipse/ant/ivy在构建或两个版本之后不会放开这些目标(第一次在Eclipse重新启动后第一次可以正常工作)的根本原因,但是之后一些后续的ant构建会变得不快乐。

就我而言,它是eclipse,它确实锁定了文件。 重新启动Eclipse不是解决方案。否则,我会回到命令行窗口。我试着在同一个jvm中设置运行,以及各种设置。

我需要调试eclipse插件吗?有没有更简单的方法来找出什么不释放Eclipse中的锁,它是插件?这是我第一次见到这个,我怀疑这是IVY造成的。

正在运行juno,ivy,spring,ant并且运行时出现问题 - 从Eclipse构建Eclipse时,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> 

ERROR:

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.. 
+0

Windows?如果有任何文件在目录中打开,将会拒绝删除。操作系统级错误。 –

+0

这不是一个错误。这是一条消息,文件被锁定。 Eclipse-ant锁定文件,除非重新启动eclipse,否则不会释放锁定。我认为这是eclipse ant插件中的一个错误或“错误”,它似乎与ivy依赖管理器相关联,因为在ivy集成之前我从未见过这种情况。 – ken

+0

更可能是操作系统问题,当然这是我的经验。你有什么机会在你的ivy设置文件中使用锁定策略?很少需要,也不太可能成为根病例:http://ant.apache.org/ivy/history/latest-milestone/settings/lock-strategies.html –

回答

3

当一个进程使用所述文件时发生。我通常在使用上述jar的程序仍在运行时发生了这个问题。确认你还没有在eclipse中运行你的程序。看到直观最简单的方法就是看这个:

enter image description here

那红色方块(停止按钮)使能是你的程序仍在运行。如果你按下,你会停止你的过程。然而,如果你的程序没有运行它会是这个样子:

enter image description here

由于“停止”按钮未启用,这意味着程序不运行。但是,有可能还有其他进程正在运行,而不是当时显示的进程。一看就知道,你可以看到这下面的截图是“电脑屏幕”图标:

enter image description here

这被启用电脑屏幕,你已经跑多个程序/进程表示。点击向下箭头可以切换到其他程序。检查这些是否正在运行,并停止这些。更简单的方法是按下双X的符号。这将关闭与完成的流程相关的每个部分,并可能会显示一个仍在运行的部分,以便您可以停止。继续按下双x和停止按钮,直到全部消失,并且您应该能够删除您的jar,并且无问题地构建。

+0

这个很好的信息和有据可查的文件,但蚂蚁进程任务完成。双XX也不起作用。如果ant构建由于其他原因而失败,那么jar文件仍然被锁定。因此,我认为这是eclipse ant模块,它并没有很好地处理异常,并且在蚂蚁插件方面存在缺陷。在2004年左右的古代,ant-eclipse bug跟踪器显示了类似这样的内容... https://bugs.eclipse.org/bugs/show_bug.cgi?id = 64713 所以它是类似的问题模式,它看起来像taskdef被引用的基准问题。解决方法可能会更改ant脚本(唉。) – ken

+0

常识:当进程使用所述文件时会发生这种情况。谢谢!! – xploreraj

0

从命令行

c:\path_to_eclipse\eclipse.exe -clean

0

这似乎是与蚂蚁插件的一个问题下面执行。在我的情况下,当插件解析build.xml文件时,它会打开文件句柄给我的taskdef元素的类路径中提到的所有jar文件。只要一个动作导致ant插件解析build.xml文件,它就会获取这些jar文件的句柄,并在eclipse关闭之前不会释放它们。我认为这是蚂蚁插件中的一个错误 - 它应该只在运行目标时保存打开的文件句柄。

我发现没有解决这个问题的办法,除了恢复到蚂蚁的命令行使用而不是eclipse插件。整个构建可以进行重组,以将其他地方的这些jar副本复制并更新taskdef目标,但这是一个严重的黑客攻击。团队中使用mac或linux的人不会看到这些,因为这些人允许您删除具有打开文件句柄的文件。可以辩论其他地方的优点。

0

我要在这里凑钱(我知道这是一个老帖子)

我的Eclipse /蚂蚁组合工作正常,但后来我创建了看起来OK了新的工作,但拒绝以除去在dist/*jars一个干净的。

我试图通过Windows资源管理器删除它们,声称它们已经在Eclipse中打开。

Eclipse重新启动但很耗时。

我的解决方案 - 我创建了一个新的工作区,并重新导入了我的项目。

我的猜测 - 我的原始工作区内发生了一些腐败。

0

我也有这个问题。这是由于文件夹被拒绝的权限而导致的。我无法切换文件夹的所有者。解决问题的方法是安装Lockhunter解锁文件夹,删除并重新创建它。