避免“资源与文件系统不同步”问题。

279

我使用Eclipse开发Java代码时,经常会收到如下信息:

资源与文件系统不同步。

右键单击 > 刷新可以解决此问题。

但是为什么Eclipse不能在发现这种情况时自动刷新呢?是否有时您希望资源不同步?

如果存在这样的情况并且它们不适用于我的工作,那么在遇到此状态时,有没有一种方法让Eclipse自动刷新?(我知道通常情况下应该尽可能少地刷新以增加对人类开发者的性能。)

更新(2012-06-25): 我的最新更新(版本:Indigo Release Build id:20110615-0604) 不再显示 首选项 - 常规 - 工作区 - 自动刷新 有一个选项“访问时刷新”-我应该使用吗?


你为什么会收到这个消息?如果不小心的话,你可能会丢失工作。 - Thorbjørn Ravn Andersen
1
每当我搜索工作区时,都会收到这个消息,因为Web工具中的Servers项目包含日志文件,这些文件在Eclipse之外不断更新。到目前为止,除了自动刷新,我还没有找到任何解决方案,但这会带来其他问题(具体来说:当某些Ant构建运行时,Eclipse将在Ant构建进行到一半时刷新并搞乱事情)。 - Stijn de Witt
也许只需右击项目,然后选择“刷新”? - Junchen Liu
愚蠢的问题:为什么“额外的副本”资源是必需的?每个人都绝对需要这个伴随着“不同步”的机会吗? - nsandersen
如果我刚刚打开了Eclipse并且绝对没有其他进程更改文件,那么文件怎么可能不同步呢?该死的Eclipse! - Niko O
10个回答

330

您可以在Window - Preferences - General - Workspace - Refresh Automatically(在新版本中称为使用本机挂钩或轮询进行刷新)中启用此功能。

Eclipse Preferences "Refresh using native hooks or polling" - Screenshot

我能想到的唯一原因是性能问题,这是为什么它不会默认启用的原因。

例如,自动刷新源文件夹可能会触发工作区的构建。也许有些人希望更多地掌握这个过程。

关于自动刷新的问题,Eclipse网站上也有一篇文章FAQ_When_should_I_use_refreshLocal?

基本上,没有外部触发器会通知Eclipse工作空间之外的文件已经被更改。相反,Eclipse使用后台线程监视文件更改,这可能会导致大型工作空间的性能问题。


1
我有偏好设置 - 通用 - 工作区 - 自动刷新。这是一样的吗? - peter.murray.rust
1
有没有办法让未保存更改的打开编辑窗口自动接受来自文件系统的更改? - Leopd
1
@Leopd 请参考避免Eclipse“文件已在文件系统上发生更改”对话框的方法?(https://dev59.com/fHRA5IYBdhLWcg3wzhbZ) - Piotr Dobrogost
14
现在它似乎被称为“使用本地钩子或轮询进行刷新”(Indigo SR1)。 - Oliver Bock
如果你有一个庞大的项目,那么频繁的构建可能会变得很烦人。我通过 一种极端的解决方案 来解决这个问题。 - brandizzi
显示剩余5条评论

37

只需右键单击文件或项目,然后单击“刷新”。错误将消失。我也面临相同的问题,它对我有用。


21
OP在他的问题中提到,“'Refresh'将始终清除此内容。”但是当处理复杂项目或与改变文件系统的Eclipse外部工具结合使用时,这会非常令人烦恼。 - ryanbrainard

19

图片描述:在窗口菜单中选择“首选项”,然后依次选择“通用”、“工作区”Window -> Preferences -> General -> Workspace


点赞猎人。 - David Lakatos

14
对于新版的Indigo,偏好设置变成了“访问时刷新”,并附有详细说明:通过工作区自动刷新外部工作空间更改。
由于使用外部工作空间会出现“资源与文件系统不同步”的问题,因此选择此选项后,问题得以解决。

1
已经解决了这个消息。谢谢! - lsaffie
这对我有效,而“自动刷新(使用本机钩子或轮询在较新的版本中称为刷新)”则不起作用。 - Penghe Geng

5

这种情况经常发生。

前往错误日志,查找异常,逐层打开,直到能看到更像根本原因的内容。它是否说"资源与文件系统不同步"?

当重命名包时,Eclipse必须在文件系统中移动文件。显然,之后它会发现它认为需要清理的东西已被重命名,无法找到它,抛出异常。

你可以尝试几件事情。首先,转到窗口:首选项、工作区,并启用“自动刷新”。理论上,这应该解决问题,但对我而言,没有成功。

其次,如果你正在进行一个包含子包的大型重构,请逐个子包地进行处理,从下往上,并在每个子包重命名后明确地与文件系统进行刷新。

第三,忽略这个错误:当错误对话框出现时,点击“中止”以保留部分更改,而不是回滚它。再试一遍,再试一遍,你可能会发现你可以使用多次重试完成整个操作。


这之后,我的一些导入文件出现了损坏,但是快速的“整理导入”操作也解决了这个问题。 - z0r
当我只是将一个类移动到新的包中时,我需要这样做(忽略错误并重试)。 - z0r

1
如果在尝试删除文件夹(在*nix上)时出现此问题,刷新无效,请打开终端并查找您要删除的文件夹下面的符号链接,并手动删除它。这解决了我的问题。

1
当你在一个clearcase视图中打开一个Eclipse工作区并尝试重命名项目时,通常会弹出警告:“资源‘project’与文件系统不同步”。如果刷新项目无法解决问题,则可以执行以下解决方法:a. 在不处于视图状态下打开工作区 b. 在Project Explorer中选择项目 c. ClearCase -> 关联项目(项目现在应该看起来像project []) d. 右键单击项目 -> 刷新(vob子文件夹现在应该为空) e. 右键单击项目 -> 重命名... f. 输入新名称
现在,您可以关闭工作区,在视图中重新打开它并刷新项目。如果您希望项目不与vob相关联,则还可以取消关联项目。

Clearcase偷走了我的狗。 - Dominic Cerisano

1

一个小提示。该消息通常出现在重命名操作期间。对我来说,快速解决方法是在确认消息后按下Ctrl-Y(重做快捷键)。仅当重命名影响单个文件时才有效。


Ctrl-Y 是什么功能? - z0r
1
Ctrl-Y 是“重做”。在这种特殊情况下,您重命名某个东西,然后Eclipse遇到问题并撤消了重命名操作。按下Ctrl-Y可以恢复重命名尝试。 - wathson
啊,我明白了。在Ubuntu中不是这样的,应该是Ctrl-Shift-Z。考虑将为什么要按Ctrl-Y的解释添加到你的答案中 :) - z0r

0
如果你是一个经常使用Eclipse的用户,那么你可能会多次遇到这个错误。这个错误简单地说,“你在Eclipse之外对工作空间中的文件进行了更改”。最简单的解决方法是选择项目并按下F5(右键单击->刷新)。
如果你需要更多的解释,你可以从这个网站阅读。

0

我无法通过刷新或打开“本机轮询”工作区功能来解决此错误。结果发现我的项目也在两个Eclipse实例中打开。一旦关闭了另一个实例,错误就消失了。因此,如果您看到此错误,请确保您的项目只在一个位置打开。


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