eclipse - 什么指示 Eclipse 应用程序工作区是否已锁定/正在使用?

标签 eclipse eclipse-plugin

当我第一次启动 Eclipse 应用程序(使用自定义插件)时,会在工作区文件夹 .metadata 中创建 .lock 文件。 如果我尝试启动第二个应用程序,我会收到正确的错误消息“工作区无法锁定”。 .lock 文件阻止我使用同一工作区启动多个应用程序。

如果我在应用程序运行时手动删除 .lock 文件,然后尝试启动第二个应用程序,它就会起作用。没关系,因为我手动删除了阻止我这样做的文件。

这是奇怪的部分:

当我关闭应用程序时,.lock 文件不会被删除,但我仍然可以启动另一个 Eclipse 应用程序,因此此时它似乎并不关心 .lock 文件。

为什么应用程序关闭后 .lock 文件没有被删除?它如何知道工作区未被使用?

如何手动检查工作区是否正在使用? .lock 文件显然不是一个安全指示器。

最佳答案

Eclipse 确实使用了 .lock 文件,但它也获取了该文件的实际“锁”。这通常是使用 Java FileChannel tryLock 方法来完成的,该方法获取文件上的操作系统级锁定:

RandomAccessFile raFile = new RandomAccessFile(lockFile, "rw");     

FileLock fileLock = raFile.getChannel().tryLock(0, 1, false);

如果文件已被另一个 Eclipse 锁定,则 tryLock 方法会抛出 OverlappingFileLockException

当 Eclipse 关闭时,锁被释放并且文件被关闭。

没有必要删除锁定文件,因此不执行此操作。

有一个环境变量osgi.locking可用于更改此行为。

完整代码位于org.eclipse.osgi.internal.location.Locker_JavaNio

关于eclipse - 什么指示 Eclipse 应用程序工作区是否已锁定/正在使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40177009/

相关文章:

java - 迁移后 Eclipse 不会将邮件属性传递给 Spring Boot

python - eclipse : "Python not configured"

java - 使用 SourceMethod 确定方法的签名

java - 从 Eclipse 插件中的文件读取

java - 在 Eclipse 的 Maven Dependencies 文件夹中按文本搜索文件

java - 使用 Map.entrySet() 时类型不匹配

java - 为什么 Eclipse 没有自带编译器?

eclipse Mercurial插件安装错误

java - 在 Eclipse 插件中创建文件而不实际保存文件?

java - 从 Package Explorer 中的选定对象获取项目名称、src 文件夹名称和包