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

Posted

技术标签:

【中文标题】避免“资源与文件系统不同步”【英文标题】:Avoiding "resource is out of sync with the filesystem" 【发布时间】:2011-05-19 15:04:16 【问题描述】:

我使用 Eclipse 开发 Java 代码并经常收到此消息:

资源与文件系统不同步。

右键单击 > 刷新将始终清除它。

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

如果有这样的条件并且它们不适用于我的工作,有没有办法让 Eclipse 在遇到这种状态时自动刷新? (我很欣赏它应该在正常开发中尽可能少地刷新,以提高人类开发人员的性能。)

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

【问题讨论】:

为什么你会收到这条消息?如果不小心,您可能会失去工作。 我在搜索工作区时收到此消息总是,因为服务器项目(在 Web 工具中)包含在 Eclipse 之外不断更新的日志文件。到目前为止,除了自动刷新之外,我还没有找到任何解决方案,但这会带来其他问题(特别是:当某些 Ant 构建运行时,Eclipse 会在 Ant 构建的中途刷新并搞砸事情)。 也许只是在项目上点一下然后选择“刷新”? 愚蠢的问题:为什么资源的“额外副本”是强制性的?是否每个人都肯定需要这个并伴随着“不同步”的机会。 如果我刚刚打开了 eclipse 并且肯定没有其他进程更改文件,文件怎么可能不同步?该死的,Eclipse! 【参考方案1】:

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

我认为默认情况下不启用此功能的唯一原因与性能有关。

例如,自动刷新源文件夹可能会触发工作区的构建。也许有些人想要对此进行更多控制。

还有一个关于自动刷新的article on the Eclipse site。

基本上,没有外部触发器通知 Eclipse 在工作区之外更改的文件。 Eclipse 使用后台线程来监视可能导致大型工作空间出现性能问题的文件更改。

【讨论】:

+1 这只发生在这种情况下吗?或者它会在其他地方发生足以影响我的事情吗? 我有首选项 - 常规 - 工作区 - 自动刷新。这是一样的吗? 有什么办法让它自动接受来自文件系统的更改,以便打开没有未保存更改的编辑器窗口? @Leopd 见avoiding eclipse “changed on file system” dialog? 它现在似乎被称为“使用本机挂钩或轮询刷新”(Indigo SR1)。【参考方案2】:

只需右键单击文件或项目,然后单击刷新。错误将消失。我也遇到了同样的问题,它对我有用。

【讨论】:

OP 在他的问题中提到,“'Refresh' 将始终清除这一点。”问题是,在处理复杂项目或与 Eclipse 外部更改文件系统的工具结合使用时,这非常烦人。【参考方案3】:

Window -> 首选项 -> 常规 -> 工作区

【讨论】:

给猎人投票。【参考方案4】:

对于新的 Indigo 版本,Preferences 更改为“Refresh on access”,并附有详细说明:Automatically refresh external workspace changes on access via the workspace。

由于“资源与文件系统不同步”,当我使用外部工作空间时会出现这个问题,所以在我选择这个选项后,问题就解决了。

【讨论】:

这摆脱了消息。谢谢 这对我有用,而 Refresh Automatically (called Refresh using native hooks or polling in newer builds) 不行。【参考方案5】:

这一直发生在我身上。

转到错误日志,找到异常,然后打开几个级别,直到您可以看到更像根本原因的内容。是否显示“资源与文件系统不同步”?

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

您可以尝试几件事。首先,转到窗口:首选项,工作区,然后启用“自动刷新”。理论上这应该可以解决问题,但对我来说,它没有。

其次,如果您正在对子包进行大型重构,请从下往上一次执行一个子包,并在每个子包重命名后显式刷新文件系统。

第三,忽略错误:当错误对话框出现时,单击 Abort 以保留部分更改,而不是将其回滚。一次又一次地尝试,您可能会发现您可以通过多次重试来完成整个操作。

【讨论】:

在此之后我的一些导入已损坏,但快速的 Organise Imports 也修复了该问题。 当我只是将一个类移动到一个新包时,我需要这样做(忽略错误并重试)。【参考方案6】:

如果尝试删除文件夹(在 *nix 上)并且刷新没有帮助,请打开终端并在您尝试删除的文件夹下方查找符号链接并手动删除它。这解决了我的问题。

【讨论】:

【参考方案7】:

当您从 clearcase 视图中打开 Eclipse 工作区并尝试重命名项目时,您通常会收到弹出警告...“资源‘项目’与文件系统不同步”。如果刷新项目不能解决问题,请执行以下解决方法:不在视图中打开工作区 b.在 Project Explorer c 中选择项目。 ClearCase -> Associate Project(项目现在应该看起来像 project [] ) d。右键单击项目 -> 刷新(vob 子文件夹现在应该是空的) e.右键单击项目-> 重命名... f。输入新名称

现在您可以关闭工作区,在视图中重新打开它并刷新项目。如果您不希望项目与 vob 关联,您也可以分离项目。

【讨论】:

Clearcase 偷了我的狗。【参考方案8】:

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

【讨论】:

Ctrl-Y 是做什么的? Ctrl-Y 是“重做”。在这种特殊情况下,您重命名某些内容,然后 eclipse 遇到问题并撤消重命名操作。按 Ctrl-Y 恢复重命名尝试。 啊,我明白了。不在 Ubuntu 中;这是Ctrl-Shift-Z。考虑在答案中添加为什么按Ctrl-Y 的解释:)【参考方案9】:

如果您是 Eclipse 的普通用户,那么您可能会多次遇到此错误。错误只是说,“您已从 Eclipse 外部对工作区中的文件进行了更改”。最简单的解决方案是选择项目并按 F5(右键单击 -> 刷新)。

如果您需要更多解释,可以阅读web site

【讨论】:

【参考方案10】:

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

【讨论】:

以上是关于避免“资源与文件系统不同步”的主要内容,如果未能解决你的问题,请参考以下文章

在内存有限的系统上写入大文件时如何避免 mapFailed() 错误

在 UNIX/Linux 中如何避免文件重叠?

避免resolv.conf设置被覆盖

CreateFileMapping,MapViewOfFile,如何避免占用系统内存

如何避免 objcopy 炸毁文件?

Android nomedia 避免图片等资源泄露在系统图库其中