为什么Maven的mvn clean没有第一次工作呢?
当我在我的项目上运行mvn clean时,有十次中有九次出现构build错误。 我必须执行mvn clean多次,直到构build错误消失。 有没有其他人经历这个? 有没有什么办法解决这个在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] ------------------------------------------------------------------------
这可能是你的IDE或其他进程持有的“目标”文件夹,并防止maven删除它。
这主要是由Windows索引造成的。 排除目标文件夹或.jar扩展索引将解决问题。 我的最佳做法是排除.jar扩展。
要排除目标文件:
- 点击Windows图标/开始菜单
- 在search框中键入索引 ,然后单击索引选项
- 然后点击修改button来调查目录索引。
- 删除目标文件夹的检查。
要排除所有.jar文件:
- 点击Windows图标/开始菜单
- 在search框中键入索引 ,然后单击索引选项
- 然后点击高级button。
- 浏览文件types选项卡。
- 在列表中,findjar并取消选中它。
closuresWin7上的窗口search服务为我工作
问题在于eclipse不断地读取你的maven项目中的目录和工件,当你正在清理时,不可避免地会有其中一个打开。
最好的办法是从Eclipse插件运行maven clean(我使用m2eclipse,这似乎工作得很好)。
另一种方法是使用maven.clean.failOnError
标志设置为false
来运行mvn clean
。 如果你运行两次通常这足以使一切正常工作,例如
mvn clean -Dmaven.clean.failOnError=false && mvn clean -Dmaven.clean.failOnError=false
您可能会想要在项目菜单中closureseclipse的“自动生成”。
在Windows上,经常遇到这个问题,因为Windows(通常)不允许删除正在使用的文件。 除了(痛苦)经历你所有的Mavenconfiguration之外,最好的办法就是不要在Windows上构build(例如使用Linux / Solaris / VM)。
我猜你正在文本编辑器中打开文件,或者在目标中的目录上打开一个shell。 如果某个进程locking了文件或文件夹,Windows将不会让您删除它。
如果你运行一个像wholockme这样的工具,你将能够看到什么进程正在locking文件。
Windows索引服务,保存JAR文件的应用程序服务器或IDE是根本原因。 最好的解决scheme是禁用Windowssearch服务或从索引中排除JAR文件。
另一个(不完美的)选项mvn clean || mvn clean
mvn clean || mvn clean
。 只有第一个失败时,双pipe道符号才会运行第二个命令。
有关如何查找和删除Windows写入锁(build议使用ProcessExplorer或Unlocker )的详细信息,请参阅发布Windows文件共享锁 。
我从哈德森运行的版本也有同样的问题。
使用handle.exe(从Sysinternals)我发现java.exe任务有一个活动的文件句柄到生成的jar文件。
如果我杀了这个任务,下一个构build就成功了。 但是,这个成功的构build之后的下一个构build会再次出现相同的错误。
即使构build任务成功,它似乎不正常终止并保持打开文件。
我是哈德森的初学者,起初我没有这个问题。 然后,我玩了一些插件,后来出现这个问题,可以重现。
我停用了几乎所有的插件(只保留了一些像颠覆和声纳这样的重要内容),现在问题似乎已经解决了。
希望这个对你有帮助 …
尝试禁用Windows索引服务。
我有同样的问题。 我closures了Eclipse,看着任务pipe理器中正在运行的进程,并看到一个名为“Java.exe”,这通常不会运行,所以我结束了,然后再次运行“mvn clean”。 它应该正确删除文件并正常工作。
如果您使用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
在我的情况下,有一个java进程正在执行surefirebooter.jar这是做Maven JUnittesting的插件。 所以你可以简单地打开任务pipe理器并杀死Java进程。
以下是我的发现 –
除了IDE坚持到jar,有时你会有一些java进程,这也将导致这一点。 在任务pipe理器中查找任何“ java.exe”/“javaw.exe”进程并杀死它。
这有助于我解决这个问题。
这是因为你阻止目标目录(打开一个文件或进入目标目录的(子)目录,或任何其他进程/应用程序使用该目录中的文件)。 如果Windows删除命令也抱怨这不是maven错误。
我发现在Windows 7上使用Maven进行Java开发时,如果源代码位于C驱动器上, 移动我的代码到另一个驱动器的作品 即使是逻辑驱动器也能工作,驱动器不一定需要成为不同的物理硬盘驱动器。
如果您不想更改Windows索引设置,则也可以简单地暂停它。
你应该closures目标中的所有文件,对我来说,我直接使用M2eclipse是更好的,你也可以尝试mvn清洁-Dmaven.clean.failOnError = false
您正在运行的应用程序应该停止。 看起来应用程序仍在运行,而您正在尝试清理应用程序。
解决scheme是重新启动Windows 7,它有助于释放资源。