【问题标题】:maven... Failed to clean project: Failed to delete ..\org.ow2.util.asm-asm-tree-3.1.jarmaven ...无法清理项目:无法删除..\org.ow2.util.asm-asm-tree-3.1.jar
【发布时间】:2013-10-29 15:53:00
【问题描述】:

我使用 STS(spring tool suite) + maven 插件。

每当我使用maven-clean 运行我的应用程序时,我都会看到以下错误:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building hhsystem ui 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ ui ---
[INFO] Deleting C:\Users\Nikolay_Tkachev\workspace\HHSystem\UI\target
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.471s
[INFO] Finished at: Mon Oct 21 12:34:33 MSK 2013
[INFO] Final Memory: 2M/90M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.4.1:clean (default-clean) on project ui: Failed to clean project: Failed to delete C:\Users\Nikolay_Tkachev\workspace\HHSystem\UI\target\org.ow2.util.asm-asm-tree-3.1.jar -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

我必须关闭STS并转到C:\Users\Nikolay_Tkachev\workspace\HHSystem\UI\target并删除org.ow2.util.asm-asm-tree-3.1.jar

再次启动 STS 后,它可以工作,但这很麻烦。

你能帮我解决这个问题吗?

更新
为 Kalathoki L.

我从这个状态运行maven-clean

我在命令行中看到了与 eclipse 插件中相同的行为

如果我在 STS 运行时观看解锁器,我会看到

:

【问题讨论】:

  • 你使用的是哪台服务器?
  • 我使用 apache Tomcat 7
  • 确保停止所有使用同一服务器的进程
  • TL;DR 回答:1. 如果您在 Eclipse 之外打开了任何项目工件,请将其关闭并重试。 2.如果不行,重启eclipse。

标签: java eclipse spring maven spring-tool-suite


【解决方案1】:

如果您有一个使用打包应用程序(如 ftp 或 ssh 会话)运行的进程 - 它可能会阻止资源被删除或移动:

所以确定正在使用war或jar的开放端口,关闭它 - 然后重新启动

sftp - ssh 端口:22

ssh 端口:取决于配置

【讨论】:

    【解决方案2】:
    1. 我关闭了 Git Bash(可能是您正在使用的另一个终端)。它会停止进程
    2. 删除 ...0.0.1-SNAPSHOT.jar
    3. mvn clean install(或其他启动项目的命令;我们有 .sh)

    【讨论】:

      【解决方案3】:

      对我来说

      mvn install
      mvn clean install
      

      工作..

      【讨论】:

        【解决方案4】:

        通过手动删除目标文件夹解决。

        【讨论】:

          【解决方案5】:

          这个错误的原因是,maven 试图删除的文件正在被某个进程使用。此类过程的一个示例是 Eclipse 或任何其他 IDE 正在对同一项目进行验证。

          请确保没有从 Eclipse 或任何其他打开项目的 IDE 运行验证。

          【讨论】:

            【解决方案6】:

            如果您在 Eclipse 或 IntelliJ 等 IDE 中遇到此错误,您可能会打开一个或多个调试窗口并在断点处暂停。终止它们。

            【讨论】:

              【解决方案7】:

              请关闭所有浏览器选项卡。下次当您尝试从目标文件夹以外的其他地方上传战争时。

              【讨论】:

                【解决方案8】:

                我通过这样做解决了我的问题:

                • mvn clean
                • mvn 安装
                • mvn 全新安装

                由于某些原因,它对我有用。祝你好运!!

                【讨论】:

                • 谢谢。使用单独的命令运行解决了这个问题。我相信这是因为前一个模块的安装阶段锁定了未来的 maven 构建模块,然后在运行安装之前作为它们的第一步进行了清理。
                【解决方案9】:

                如果所有步骤(在现有答案中)都不起作用,只需关闭 eclipse 并再次打开 eclipse。

                【讨论】:

                • 你的答案是最好的。
                【解决方案10】:

                在任务管理器中删除 java.exe 进程并运行 mvn clean install。它对我有用。

                【讨论】:

                • 有没有办法不这样做?我的服务器需要一些时间才能启动,我不希望那样 =(
                • 这对我有用。但是,我想知道它为什么起作用。你怎么知道 java.exe 是唯一一个在 jar 上有“锁”的。
                • 这对我有用,但是没有更“正确”的方法来停止服务器吗?我从命令行使用 mvnw 启动它...难道没有办法停止它吗?
                • 不能停下来吗?
                【解决方案11】:

                如果您对目标文件夹没有管理员权限,Maven 会抱怨。请检查您是否拥有删除该文件夹的管理员权限。

                【讨论】:

                  【解决方案12】:

                  在预清理阶段,我使用 Maven Unlocker 程序执行。该程序为任何程序解锁所有文件和目录。

                  我使用 maven-antrun-plugin 并且仅在 Windows 系统中执行此操作

                  <profile>
                    <activation>
                      <os>
                        <family>windows</family>
                      </os>
                    </activation>
                    <build>
                      <plugins>
                        <plugin>
                          <artifactId>maven-antrun-plugin</artifactId>
                          <version>1.8</version>
                          <executions>
                            <execution>
                              <phase>pre-clean</phase>
                              <configuration>
                                <tasks>
                                  <exec dir="${project.build.directory}" executable="cmd" failonerror="false">
                                    <arg value="Unlocker.exe" />
                                    <arg value="/S" />
                                  </exec>
                                </tasks>
                              </configuration>
                              <goals>
                                <goal>run</goal>
                              </goals>
                            </execution>
                          </executions>
                        </plugin>
                      </plugins>
                    </build>
                  </profile>
                  

                  【讨论】:

                  • 你能补充解释吗?
                  • 我相信他正在尝试运行 Unlocker windows 程序 - filehippo.com/download_unlocker/tech 。这将删除对当前执行目录的任何依赖。这不是一种可靠或安全的方法。
                  • maven-antrun-pluign 在 pre-clean maven 阶段自动执行解锁器。
                  • 是的,我执行解锁程序。 Windows 锁定更多文件,因为他是 Windows。 Unlocker 是解决这个问题的好工具
                  【解决方案13】:

                  关闭你在 mvn clean 之前打开的目标文件夹及其文件

                  【讨论】:

                  • 这对我有用。我在终端中打开了目标文件夹,这使得 maven 无法清理目标文件夹。在cd-ing 退出文件夹后,maven 能够再次清理。
                  • 是的,我在 Windows 资源管理器中打开了该文件夹!
                  • 在 Windows 资源管理器中打开了文件夹。这有帮助!
                  【解决方案14】:

                  可能有许多进程使用已编译的源代码,可能是服务器、旧的 maven 指令或 IDE。确定终止所有进程,停止服务器,然后再次执行 maven。如果问题仍然存在,您应该关闭 java.exe 进程。

                  问候!

                  【讨论】:

                  • 加上我的两分钱,因为它有点扩展了这个答案:例如,它可能是像 Google Drive 这样的文件夹同步过程,它占用了你的文件。这就是我的问题。只需终止进程,构建将再次起作用。
                  • 这是我的解决方案。我在后台运行了一个意外的 java.exe 进程,这阻止了 maven 正确执行。
                  【解决方案15】:

                  我有同样的问题,这个

                  mvn clean install -U
                  

                  命令修复了错误。

                  【讨论】:

                  • -U 是做什么的?
                  • @jDub9 -U 强制检查远程存储库上的更新版本和快照
                  【解决方案16】:

                  我有类似的问题。早些时候,我使用 Maven 3 来构建项目。切换到 maven 2 后,出现上述错误。

                  通过切换到 Maven 3 解决了这个问题。

                  【讨论】:

                    【解决方案17】:

                    尝试禁用项目->自动构建。

                    正如天蝎座建议的那样,有一个正在运行的进程在某处锁定了某个文件。

                    我有一个大型的多模块 maven 项目,该项目经常在清理时失败,这为我解决了这个问题。 完成后我重新启用自动构建。

                    【讨论】:

                      【解决方案18】:

                      你也可以试试-Dmaven.clean.failOnError=false (来自Maven FAQ

                      【讨论】:

                      • 这可行,但很危险,因为您在使用过时的类时可能会遇到意外行为。
                      • 为了让我最后的评论更清楚:maven 构建将运行,但目标文件夹可能仍然存在!
                      • 为什么会出现在答案中?
                      • 因为有人用这个答案回答了这个问题?
                      【解决方案19】:

                      如果您锁定 org.ow2.util.asm-asm-tree-3.1.jar 并启动 eclipse,日志会显示谁无法锁定文件。无法锁定文件的同一代码行不会释放锁定。

                      【讨论】:

                        【解决方案20】:

                        对于 linux 用户:可能的解决方案。

                        由于 “无法删除 将发生构建错误,如果有机会仅提供给 root 用户的删除权限而不是普通用户

                        修复:键入ll命令列出无法删除的文件,如果文件被授予root访问权限,则更改为普通用户:

                        sudo chown -R 用户名:用户名文件名

                        稍后尝试 maven clean and build。

                        【讨论】:

                        • 谢谢你,你救了我的命。对我的目标文件夹造成特权,所以我无法通过 mvn 清除
                        • 我在 ubuntu 中也遇到了这个权限问题。 chmod -R 777 /folder/path/here 解决了我的问题。谢谢
                        【解决方案21】:

                        总结:使用一个外部脚本(批处理文件)a) 停止服务器,b) 在运行 maven-clean 之前解锁 .jar 文件。

                        步骤:

                        1. 将 maven-antrun-plugin:run 目标绑定到 mvn clean 的 pre-clean 阶段。看看如何做到这一点here

                        2. 在此处查看如何使用 antrun 插件在 Windows 中运行外部批处理文件:sblundy's answer to "Starting external process"。我们称这个文件为 unlock_handles.bat

                        3. 使用 pre_clean.bat 中的 Sysinternals 句柄 实用程序 download link 来 a) 停止 Tomcat 服务器并 b) 解锁 .jar 文件。 handle -chandle -p 在这里很有用。

                        哇!这有点工作,但它会可靠地为您自动执行该过程,因此您每次都需要自己手动完成!


                        好的,这是一个粗略的概念验证版本 unlock_handles.bat 供您试用:

                        REM "Use handle.exe to figure out the process id and handle ids, parse the output, then close the handle (again using handle.exe)"
                        
                        cd "C:\Users\Nikolay_Tkachev\workspace\HHSystem\UI\target"
                        "c:/Program Files/Process Explorer/handle.exe" -p java.exe "C:\Users\Nikolay_Tkachev\workspace\HHSystem\UI\target" > handles.txt
                        
                        @echo "O====== Going to unlock all the below file handles! =======O"
                        FOR /F "tokens=1-26 delims=: " %a in (handles.txt) DO @echo %h
                        FOR /F "tokens=1-26 delims=: " %a in (handles.txt) DO handle -p %c -c %f -y
                        

                        当然,在尝试之前,您必须更改 Sysinternals 的 handle.exe 的路径。

                        【讨论】:

                        • 我怎样才能得到 pre_clean.bat
                        • 如果您写下有关第二项的更多详细信息会很有帮助
                        • 今天晚些时候我会尝试为您提供一个粗略的版本,但基本上,我们必须编写它;这不是存在的东西! (此外,unlock_files.bat 是一个更好的名称;pre-clean 是使用它的上下文)。
                        • 我用你可以运行的 unlock_handles.bat 更新了答案。请让我知道这对你有没有用!编辑:在 DOS 批处理文件中解析字符串是如此...一起破解 :-)
                        • 我不明白我需要做什么
                        【解决方案22】:

                        在开始清理之前停止服务器。

                        停止服务器

                        您可以从服务器视图停止服务器。

                        停止服务器:

                        1. 在服务器视图中(窗口 > 显示视图 > 其他 > 服务器 > 服务器 > 确定),选择您要停止的服务器。
                        2. 点击停止服务器图标 在工具栏中。在 Servers 视图中,服务器的状态 更改为已停止。
                        3. 如果由于某种原因服务器无法停止,您可以终止 流程如下:

                          一个。切换到 Debug 透视图。

                          b.在“进程”视图中,选择要停止的服务器进程。

                          c。点击终止 工具栏中的图标。

                        注意:当终止一个服务器时,服务器进程将结束,服务器不会经过正常的停止例程,例如调用servlet的destroy()方法。

                        来源: Eclipse 帮助

                        【讨论】:

                        • 我怎样才能做到?我想看更多细节。
                        • @user2740224 请参阅停止服务器
                        • 当我使用 maven-clean 时,我的服务器在 Eclipse 中停止
                        • 我不想重新启动我的服务器,因为重新启动需要太多时间。我该怎么办?我的朋友不需要重新启动它
                        • 这在 VSCode 中会怎样?
                        【解决方案23】:

                        您的问题是,当您执行 mvn clean 命令时,STS 中正在运行的进程正在使用位于目标目录中的文件。 Maven 将无法删除这些文件(因为其他进程仍在访问它们),因此会因该错误而失败。

                        在运行 Maven 控制台命令之前,尝试从 STS 中停止所有进程(测试、服务器、应用程序)。注意:如果 STS 正在清理项目并因此重新编译源代码而不运行进程,也可能会出现此行为。

                        【讨论】:

                        • 你能要求修复 Kalathoki L. 以外的其他活动吗
                        • 我该如何解决?**注意:如果 STS 正在清理项目并因此重新编译源代码而不运行进程,也可能会出现此行为。**
                        • 你太棒了,在我的情况下是正确的,即运行进程
                        猜你喜欢
                        • 2011-01-15
                        • 2020-01-12
                        • 1970-01-01
                        • 2016-07-20
                        • 1970-01-01
                        • 2020-08-14
                        • 1970-01-01
                        • 1970-01-01
                        • 2023-03-21
                        相关资源
                        最近更新 更多