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

时间:2009-10-23 19:09:06

标签: maven-2

当我在项目中运行 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] ------------------------------------------------------------------------

19 个答案:

答案 0 :(得分:36)

可能是您的IDE或其他进程正在抓住“target”文件夹并阻止maven删除它。

答案 1 :(得分:19)

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

要排除目标文件:

  1. 点击Windows图标/开始菜单
  2. 在搜索框中输入索引,然后点击索引选项
  3. 然后点击修改按钮调查目录索引。
  4. 删除目标文件夹的检查。
  5. 要删除所有 .jar 文件:

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

答案 2 :(得分:13)

关闭Win7上的Window Search服务为我工作

答案 3 :(得分: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的“自动构建”。

答案 4 :(得分:3)

以下是我的发现 -

除了IDE 持有jar之外,有时你会有一些java进程也可能导致这个问题。查找任何" java.exe" /" javaw.exe" 在任务管理器中处理并将其删除。

它帮助我解决了这个问题。

答案 5 :(得分:3)

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

答案 6 :(得分:2)

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

如果您运行wholockme之类的工具,您将能够看到锁定文件的进程。

答案 7 :(得分:2)

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

-Dmaven.clean.failOnError=false

在此处,在VM选项中设置:

Maven Runner settings

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

答案 8 :(得分:2)

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

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

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

答案 9 :(得分:1)

尝试禁用Windows索引服务。

答案 10 :(得分:1)

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

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

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

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

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

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

希望这有点帮助...

答案 11 :(得分:1)

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

答案 12 :(得分:1)

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

答案 13 :(得分:0)

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

答案 14 :(得分:0)

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

答案 15 :(得分:0)

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

答案 16 :(得分:0)

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

答案 17 :(得分:-1)

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

答案 18 :(得分:-5)

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