当我第一次启动 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/