Eclipse能否自动刷新资源?

167

Eclipse(3.4.2 with PyDev)处理失步资源(在IDE之外编辑的文件)的方式与我使用过的其他IDE不同,其他IDE仅将打开编辑器的资源视为失步。 在Eclipse中,任何资源都可能失步。

这意味着当我在Eclipse之外更改任何文件后执行搜索时,我会收到错误对话框,告诉我文件已失步,即使它们没有打开的编辑器。 据我所知,没有全局刷新命令,因此我被迫阅读错误对话框中的项目名称(我有几个项目),并为每个项目右键单击+刷新。

我已经检查了“设置>常规>工作区”中的“自动刷新”设置,但这没有效果。是否有办法让Eclipse始终只从磁盘加载非活动资源?


Eclipse 3.7+ 的最新答案在第二个回答中。 - Paul Verest
您甚至可以使用远程系统资源管理器(RSE)与远程文件同步。 - Christophe Roussy
2
可能是[eclipse, refresh files edited by external editor]的重复问题(https://dev59.com/UWYr5IYBdhLWcg3ws8NT)。 - Boris Lopez
@Boris,这个问题几年前就被问过了。另一个应该标记为问题的重复。 - Glenn Slayden
13个回答

201

这个问题将在Eclipse 3.7(Indigo版本)中得到解决。虽然"自动刷新"功能最终可以将资源带回同步状态,但是刷新钩子仅适用于Windows平台,因此在Linux和Mac OS上需要定期轮询文件系统。

从3.7开始,有一个新的偏好设置设置 > 通用 > 工作区 > 访问时刷新(也称为轻量级刷新)。该偏好设置使Eclipse在发现资源处于“不同步”状态时自动刷新它们。当打开、读取或搜索文件时,它会防止出现不同步错误。

另请参见:https://bugs.eclipse.org/303517


64
难以置信这竟然是一个“选项”。我从来没有不刷新我的不同步文件。 - Christoffer Hammarström
19
我曾经反对将其作为一个选项。你说得对,这很疯狂。 - James Blackburn
6
如果您希望在Eclipse 3.8 / 4.2中将此选项设置为默认值,请在此处投票:http://bugs.eclipse.org/340977。 - James Blackburn
5
我使用IntelliJ IDEA。我从不用担心保存文件,因为它们会自动保存。它可以无缝地工作。如果磁盘上的文件发生变化,它也会在IDE中发生变化。当出现冲突时,它会发出警告并允许您进行差异和合并。如果情况恶化,它还有本地历史记录,因此您始终可以还原到几分钟之前。 - Christoffer Hammarström
1
@ChristofferHammarström:Eclipse还有本地历史记录功能:在文件编辑器中右键单击 > 比较 > 本地历史记录。 - ccpizza
显示剩余7条评论

28
我认为如果您在“项目资源管理器”中单击项目节点并按F5或右键单击并选择“刷新”,则该项目的所有资源都将被刷新。此外,如果您使用CTRL +单击多个项目,则应能够同时刷新多个项目。
单击项目、使用CTRL+A选择全部内容,然后按F5即可完成所需操作——刷新全部内容。
我需要有机会测试一下,但我相信这就是我过去解决类似问题的方法。
我注意到这个答案经常被投反对票。我想指出问题是关于特定版本的Eclipse:3.4.2。直到Eclipse的3.7 Indigo版本,实际上没有自动刷新不同步资源的方法,正如James Blackburn的答案中所提到的。本答案中描述的方法是在3.4.2版本(以及3.7 Indigo之前的任何其他版本)中实现此目的的唯一方法。

13
请注意,如果选择的多个项目中有任何一个已关闭,则刷新这些项目将无法工作 - 您需要先取消选择已关闭的项目。或者,在“包资源管理器”或“导航器”视图中未选择任何项目时,按F5将刷新所有打开的项目(按Ctrl进行取消选择,单击空白处无效)。 - Tom Clift
71
不冒犯任何人,但为什么关于如何让Eclipse自动执行某项操作的问题的被接受答案是手动执行的描述? - Srekel
12
因为在发布时,这是实现@DNS想要做的唯一方法。根据@James Blackburn最近的回答,问题实际上是在此问题最初发布后报告并纠正的。使用更新版本的Eclipse,此答案是不正确的。但是,该问题特别引用了Eclipse 3.4.2 - 这是解决所提出问题的方法。 - Thomas Owens

25

在Eclipse IDE中,不同步的问题很常见,因此您需要检查此选项:Windows->Preferences->Workspace->Refresh using native hooks or polling。


7
我相信这是目前正确的答案,至少从Eclipse Mars开始就是。 - Henno Vermeulen
2
这个复选框在我的Ubuntu 14.04上的Eclipse 4.5版本中无法正常工作。当文件在外部更改后,Eclipse并不会立即看到它,直到我在Eclipse中打开此文件或进行刷新操作。因此,如果我在运行从eclipse启动的服务器应用程序时从外部编辑器更新.css文件,浏览器将看不到更新。为了解决这个问题,我使用了这个插件,这使得复选框实际上起作用了。请参见这个答案 - Ruslan Stelmachenko
这是版本Neon.3 Release (4.6.3)的可行选项。 - Kimchi Man
在 Mac 上使用 Neon.3,选项在“首选项”>“常规”>“工作区”>“使用本地钩子或轮询刷新”。 - jmelvin

6
Eclipse Helios拥有一个内置的刷新特性,位于偏好设置 > 通用 > 工作区。它在禁用自动构建的相同位置。选择自动刷新。具有相同功能的插件是Andrei Loskutov的FileSync插件。更新站点地址是:http://andrei.gmxhome.de/eclipse/。安装时,请选择Eclipse 3.5-3.7插件 > FileSync。

5

感谢这个插件。如果没有它,即使启用了“Window->Preferences->General->Workspace->Refresh using native hooks or polling”,我的Ubuntu上的Eclipse也无法看到文件的外部更改。 - Ruslan Stelmachenko
这个插件在Eclipse 2020-12上表现非常出色。在MacOS(Big Sur)和Catalina上,它刷新速度太慢了。使用此插件,我在外部编辑器(VSCode)中进行的更改需要大约4秒钟才能在Eclipse中触发刷新/重建。 - Christoph
有一个Eclipse的bug针对在MacOS和Windows上的本地刷新:https://bugs.eclipse.org/bugs/show_bug.cgi?id=108697 看起来非常接近解决了。 - Christoph

5

全局刷新实际上存在于普通的Eclipse中,无需任何插件,也无需选择工作区中的每个项目。

基本上,您需要取消选择项目资源管理器中的所有内容,然后按F5。要做到这一点,请在项目资源管理器中Ctrl +单击所选资源,然后按F5。


4

全局刷新 - 在包资源管理器中没有选中任何内容(或者选中全部内容),按F5键(或右键点击空白处并选择“刷新”)。当然,如果您有大型项目,这可能需要相当长的时间。


这不是自动的,但非常有效 (+1)。 - loved.by.Jesus

3

在Eclipse中,确实缺少全局刷新功能。如果你选择了所有项目然后运行刷新(例如按下F5),但是你的选择中包含已关闭的项目,则该方法不起作用。这意味着,如果像我一样有一半以上的项目已关闭,那么你需要手动Ctrl-click浏览你的数十个项目,这非常痛苦。我希望Eclipse能够简单地忽略已关闭的项目。


2

是的,访问时刷新功能早就应该有了……对于这种问题的答案通常建议启用全局自动刷新,但对于大型远程项目来说可能需要很长时间。

实际上,有人会说访问时刷新功能应该是原始(< 3.x)的默认行为……


2
我通过创建一个新的“外部工具”运行配置,执行一个空白批处理文件来解决了这个问题。在运行配置中,您可以让它在完成后刷新工作区。然后我使用Practically Macro创建了一个宏,该宏1)执行最后一个外部工具运行配置(刷新工作区),然后2)执行最后一个调试运行配置(运行我的应用程序)。如果取消“分配控制台”的选择,则已完成的外部工具条目将不会显示在调试窗口中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接