在Eclipse上,“首选项 - >常规 - >工作区 - >刷新使用本机挂钩或轮询”是做什么的?

时间:2013-11-13 10:50:57

标签: java eclipse

Eclipse上有这个复选框:

偏好设置 - >一般 - >工作区 - >使用本机挂钩或轮询刷新

Eclipse documentation说:

  

如果启用此选项,则工作区资源将为   与文件系统中的相应资源同步   自动使用本机刷新提供程序(在Windows上)或轮询   机构。

从文档和复选框说明中可以看出,Eclipse使用某种操作系统挂钩来获取有关文件更改的通知。并且似乎使用轮询在Windows以外的操作系统上模拟此功能。

我的问题是:

  1. 这真的是Eclipse在做什么吗?我想知道如果通过检查此选项,我将有一个线程不断检查文件系统。我的文件在外部发生变化,但每天大约4次,为了使这个功能对于程序员来说很好,轮询必须每分钟检查一次文件系统。
  2. 这真的只适用于Windows吗?如果我在Linux上使用Eclipse,那是否一定意味着Eclipse将进入轮询模式?
  3. 最后,更重要的是,如果Eclipse这样做,那么它是如何做到的呢? JNI?

3 个答案:

答案 0 :(得分:10)

是的,这正是Eclipse正在做的事情。对于Mac或Linux,它目前使用轮询。

有一个扩展点org.eclipse.core.resources.refreshProviders可用于为每个平台提供刷新代码,人们已经为Mac和Linux编写了测试插件,但它们不在产品中(参见https://bugs.eclipse.org/bugs/show_bug.cgi?id=108697https://bugs.eclipse.org/bugs/show_bug.cgi?id=237344

这是org.eclipse.core.internal.refresh.MonitorManager的来源,PollingMonitor进行轮询刷新。

org.eclipse.core.internal.resources.refresh.win32.Win32RefreshProvider通过JNI使用本机方法刷新Windows(它只在Windows中插件)。

org.eclipse.core.internal.resources.refresh.win32.Win32MonitorWin32Natives包含核心代码。

答案 1 :(得分:4)

I have found out选项“使用本机挂钩或轮询刷新”是以旧的方式执行此操作:

  

以前的Eclipse版本依赖于本机刷新提供程序(在Windows上)或轮询机制来保留   工作区与底层文件系统同步。这个   通过选择使用本机刷新仍可以启用功能   挂钩或轮询打开首选项页面首选项>一般>   工作区。

     

现在有了一种新的轻量级机制。档   发现工作空间不同步,例如同时   通过编辑器访问文件内容将自动进行   异步刷新。如果要以这种方式刷新文件,请转到   打开首选项页面首选项>一般>工作区并选择   访问时刷新。

从现在开始,我只会在访问时使用Refresh。

答案 2 :(得分:1)

"使用本机挂钩刷新或轮询" 可以解决使用外部编辑器编辑文件时未更新项目构建的问题。 problem details