【问题标题】:eclipse locks jar fileseclipse锁jar文件
【发布时间】:2013-02-20 22:05:16
【问题描述】:

我在eclipse indigo 有一个带有m2e 1.2.0.20120903-1050 maven 插件的maven 项目。该项目包含 maven system 依赖项,这些 jar 文件被检入 git 存储库。

这一切都很好,直到我需要切换到另一个在 system 依赖项中发生变化的分支。由于文件被锁定,Git 无法更新内容。

这似乎是eclipse自己或代表m2e锁定了jar库。我尝试关闭项目,但这无济于事,为了释放锁定,我必须重新启动 Eclipse。

这样比较麻烦。有没有什么技巧可以在不重启eclipse的情况下释放锁?

【问题讨论】:

    标签: java eclipse m2e eclipse-indigo


    【解决方案1】:

    窗口

    您可以从http://technet.microsoft.com/de-de/sysinternals/bb896655.aspx 手动使用handle.exe

    1. handle.exe .jar 为您提供所有 jar's 的句柄 ID 和进程 ID 列表。
    2. handle.exe -c <handle-id> -p <process-id> 杀死 Handle,可能会抛出异常,如果是,请在 Eclipse 的 bug-report-system 中填写 bug-report 让我们知道 dead -锁。

    编辑:

    使用管理员权限执行命令很重要(感谢 Paulo Merson)。

    【讨论】:

    • 我试过句柄。确认 Eclipse 确实是保持锁定的进程很有用。但是,handle -c <handle-id> -p <pid> 不起作用。它要求确认,但最后消息是“错误关闭句柄:无效标识符”。
    • @PauloMerson 嗯,我想知道标识符是什么意思。也许是文件锁定标识符。无效标识符是不再指向文件锁的标识符。可能锁没了。您能否检查句柄 ID 是否快速变化?
    • 我第一次打电话给handle C:\<path>\myjar.jar。输出显示eclipse.exe pid: 20272 type: File 1314: C:\<path>\myjar.jar。没有明确指示句柄 id 是什么,但通过排除我认为它是1314。所以我尝试了handle -c 1314 -p 20272,得到了一个确认问题Close handle 1314 in eclipse.exe (PID 20272)? (y/n),回答是,但得到了Error closing handle: The handle is invalid
    • 这很有趣,你的假设似乎是正确的。 1314很低。 pid 意味着定期增加,但该值非常低。我不再认为句柄 ID 变化很快。另一个原因可能是 Windows 权限。可以管理员身份执行命令行吗?
    • 宾果游戏!当我以管理员身份打开命令行时,handle 会关闭句柄。 (如果愿意,请在答案中注明。)
    【解决方案2】:

    这不是 Windows 的问题。这是 Eclipse 正在做的事情的问题。它在 Eclipse 运行时保持文件打开。这是一种可怕的做法。

    【讨论】:

    • 我也遇到了这种情况。我必须关闭 Eclipse 才能进行 ant 构建,这会分散注意力。
    【解决方案3】:

    您可以下载Sysinternals Suite from Microsoft 并使用handle.exeprocexp.exe 程序来查找哪个程序在jar 上有句柄。在 Eclipse 中关闭句柄似乎是安全的(我没有注意到任何副作用)。

    sysinternals 网站上记录了如何使用handle.exe,对于 procexp.exe,请使用 Find -> Find Handle 或 DLL 菜单选项。键入锁定的 jar 文件的名称,然后在子窗口中选择锁定过程。在主窗口中它应该显示一个进程中文件的句柄,你可以检查进程是你认为的,然后右键单击句柄并选择关闭句柄

    您应该以管理员权限运行这两项任务。

    网上也有其他指南:

    【讨论】:

      【解决方案4】:

      没有。如果文件已打开,git 无法删除它们。这是 Windows 的事情。

      我建议您将它们安装在本地存储库中,而不是处理系统范围,

      【讨论】:

      • Jar 文件用于旧版 ant 构建脚本中,因此我无法对其进行更改。我想以某种方式告诉 eclipse 在不重新启动的情况下释放锁:)
      • 尝试关闭项目。在您的情况下,我不会在同一个工作区中切换分支,但每个分支都有一个单独的工作区。
      • 关闭没有帮助,我试过了。我特意将许多分支转移到一个工作区,因为它简化了不同项目版本之间的切换。如果我为每个分支创建它,那将是太多的工作空间。
      • 目前我有 3 个我使用的分支和大约 10 个我不时使用的分支。
      • 我们的分支变化很大——我发现 Eclipse 不能很好地处理分支中不同的子模块——所以我只有一个工作区 pr 分支。只要你有那么多,如果我是你,我也会这样做。 Maven 根本还不是 Eclipse 的一等公民,m2e 所做的所有手动操作并没有完全涵盖这一点。也就是说,我会怀疑您的 ant 任务 - 您是否在分叉的 jvm 中运行所有 maven 和 ant 任务?
      【解决方案5】:

      我也遇到过这个问题。事实证明,这是由 Windows 索引文件引起的。我使用的是 Windows 7。我去了控制面板并选择了索引选项。我确保删除了我的代码所在的所有文件夹。这解决了我的问题。

      【讨论】:

        【解决方案6】:

        我在工作中使用 RAD(eclipse) 时遇到了同样的问题。在我的情况下,它发生在使用 JD-Eclipse (1.0.0) 插件反编译时。安装最新的 Eclipse Mars (4.5.1) 和 JD-Eclipse (1.0.0) 时没有问题。我怀疑工作中RAD版本中的eclipse(4.2.1)底层版本与JD-Eclipse(1.0.0)不兼容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多