为什么Maven的mvn清洁没有第一次工作?

问题描述 投票:36回答:19

当我在我的项目上运行mvn clean时,我遇到了九次十分之一的构建错误。我必须多次执行mvn clean,直到构建错误消失。有没有人经历过这个?有没有办法在Maven中解决这个问题?如果没有,你如何解决它?我写了一个删除目标文件夹的bat文件,但效果很好,但是当你处理多个项目时这是不实际的。我正在使用Maven 2.2.1。

[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to delete directory: C:\Documents and Settings\user\My Documents\software-developm
ent\a\b\c\application-domain\target. Reason: Unable to delete directory C:\Documen
ts and Settings\user\My Documents\software-development\a\b\c\application-domai
n\target\classes\com\a\b

[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6 seconds
[INFO] Finished at: Fri Oct 23 15:22:48 EDT 2009
[INFO] Final Memory: 11M/254M
[INFO] ------------------------------------------------------------------------
maven-2
19个回答
36
投票

可能是您的IDE或其他进程持有“目标”文件夹并阻止maven删除它。


1
投票

我从Hudson运行的构建遇到了同样的问题。

使用handle.exe(来自Sysinternals)我发现java.exe任务对生成的jar文件有一个活动的文件句柄。

如果我杀了这个任务,下一个构建就成功了。但是,在成功构建之后的下一个构建将再次失败并出现相同的错误。

即使构建任务成功,似乎也没有正确终止并保持文件打开。

我是Hudson的初学者,起初我没有遇到这个问题。然后我玩了一些插件,后来这个问题出现了,并且可以重现。

我几乎停用了所有插件(只保留了一些必要的插件,如颠覆和声纳),现在问题似乎已经解决了。

希望这个对你有帮助 ...


1
投票

尝试禁用Windows索引服务。


1
投票

我有同样的问题。我关闭了eclipse并查看了任务管理器中正在运行的进程,并看到了一个名为'Java.exe'的程序,它通常不会运行所以我结束了它,然后再次运行'mvn clean'。它应该正确删除文件并正常工作。


1
投票

在我的例子中,有一个java进程正在执行surefirebooter.jar,它是进行maven JUnit测试的插件。所以你可以简单地打开任务管理器并终止java进程。


0
投票

那是因为你阻止目标目录(打开文件或进入目标目录的(子)目录,或任何其他进程/应用程序使用此目录中的文件)。如果windows delete命令也抱怨它不是maven故障。


0
投票

我发现当源代码在C盘上时,使用Maven on Window 7的Java开发很困难。将我的代码移动到另一个驱动器。即使逻辑驱动器也可以工作,驱动器不一定需要是不同的物理硬盘驱动器。


0
投票

如果您不想更改Windows索引设置,也可以暂停。


0
投票

你应该关闭目标中的所有文件,对我来说我直接使用M2eclipse更好你也可以尝试mvn clean -Dmaven.clean.failOnError = false


-1
投票

应该停止正在运行的应用程序。当您尝试清理应用时,看起来应用仍在运行。


-5
投票

解决方案是重新启动Windows 7.它有助于释放资源。


19
投票

这主要是由Windows索引引起的。从索引中排除目标文件夹或.jar扩展名将解决问题。我的最佳做法是排除.jar扩展名。

要排除目标文件:

  1. 单击Windows图标/开始菜单
  2. 在搜索框中键入索引,然后单击索引选项
  3. 然后单击“修改”按钮以调查目录索引。
  4. 删除目标文件夹的检查。

要排除所有.jar文件:

  1. 单击Windows图标/开始菜单
  2. 在搜索框中键入索引,然后单击索引选项
  3. 然后单击“高级”按钮。
  4. 浏览文件类型选项卡。
  5. 在列表中,找到jar并取消选中它。

13
投票

在Win7上关闭Window Search服务对我有用


11
投票

问题是eclipse不断读取你的maven项目中的目录和工件,并且当你清理时不可避免地会打开其中一个。

最好的方法是从eclipse插件运行maven clean(我使用m2eclipse,这看起来效果很好)。

另一种方法是运行mvn clean,将maven.clean.failOnError标志设置为false。如果你经常运行两次就足以使一切正常工作,例如

mvn clean -Dmaven.clean.failOnError=false && mvn clean -Dmaven.clean.failOnError=false

您可能希望在执行此操作时从项目菜单中关闭eclipse“自动构建”。


3
投票

通常在Windows上遇到此问题,因为Windows(通常)不允许您删除正在使用的文件。除了(痛苦地)完成所有Maven配置之外,最好的办法就是不要在Windows上构建(例如使用Linux / Solaris /任何VM)。


3
投票

以下是我的发现 -

除了坚持使用jar之外,有时你会有一些java进程也可能导致这个问题。在任务管理器中查找任何“java.exe”/“javaw.exe”进程并将其终止。

它帮我解决了这个问题。


2
投票

我猜你是在文本编辑器中打开文件,或者在目标中的目录上打开shell。如果某个进程锁定了文件或文件夹,Windows将不允许您将其删除。

如果你运行像wholockme这样的工具,你将能够看到锁定文件的进程。


2
投票

如果您使用的是IntelliJ,则可以在Maven Runner设置中传递其他参数:

-Dmaven.clean.failOnError=false

在VM选项中将其设置为:

参考文献:http://www.jetbrains.com/idea/webhelp/maven-runner.html http://maven.apache.org/plugins/maven-clean-plugin/faq.html


2
投票

Windows索引服务,应用程序服务器或持有JAR文件的IDE是根本原因。最佳解决方案是禁用Windows搜索服务或从索引中排除JAR文件。

另一个(不完美)选项mvn clean || mvn clean。双管符号仅在第一个命令失败时运行第二个命令。

有关如何查找和删除Windows写锁定的详细信息,请参阅Releasing Windows file share locks(它建议使用ProcessExplorerUnlocker)。

© www.soinside.com 2019 - 2024. All rights reserved.