在Eclipse中重新构建已删除的类文件

我不小心删除了我的项目中的.class(Java字节码)文件(在文件系统上,而不是使用Eclipse本身)。 容易修复,对吧? 只需重新构建它。 但这不起作用! 即使我从“项目”菜单中选择“构建项目”或“全部构建”或“自动构建”,文件系统上也没有实际发生任何事情,我仍然得到:

Exception in thread "main" java.lang.NoClassDefFoundError 

我只想从我已有的源代码重新编译它!

顺便说一下,当我从“Project”菜单中选择“Clean …”时,Eclipse也不会删除任何文件。 我也尝试将项目重新导入到不同的文件夹中,但Eclipse只复制所有.class文件,问题仍然存在。

OP在评论中回答了他自己的问题 (2年半前):

找到解决方案:该项目依赖的另一个项目无法编译,因为它无法清理,因为Eclipse想要删除整个项目中的.svn目录(我不知道为什么),并且它不能因为某些这些文件没有写入权限。 我很高兴消除所有.svn数据只是为了让这个工作! 谢谢你的提示。 – user690075 2011年9月7日在1:25


关于赏金

这个问题没有得到足够的重视。

这个问题一直在浪费我的时间。

如果OP的答案没有解决您的问题,您应该在新post上提出更具体的问题,描述您的尝试以及OP的解决方案如何解决您的具体问题。

话虽如此,假设您尝试了OP发布的解决方案,可能会出现另一个问题(不是由删除类文件引起的)导致相同的错误。 因为你开始对别人的问题给你一个赏金,而你却无法获得声望,我认为值得一提的是,确保你的JDK版本在旧的或外部使用的源代码之间是兼容的,这是值得的。在你的项目中。 当编译器到达代码中引用在不兼容的JDK上开发的库中定义的对象/类的点时,您将得到相同的错误NoClassDefFoundError ,它缺少在JDK版本中找不到的关键内部依赖项。

我会详细介绍,但由于这个问题是关于删除类文件所带来的错误,我觉得这样做是不对的。

彻底清洁

1)查找并删除.eclipse文件夹(您可以先备份它们)

2)删除相关的.class文件

3)如果有任何.svn文件夹 ,请手动或通过svn客户端删除它们

4)不要为此使用自动构建,而是手动选择已损坏的项目并执行干净 (如果存在依赖项)

如果失败,可能最好将源代码打包并重新导入为新项目。 这可以避免浪费时间在可能的IDE错误上

在更传统的语言中,程序作为启动过程的一部分一次性加载。 Java没有这个问题,因为它采用不同的加载方法。 这是变得更容易的活动之一,因为Java中的所有内容都是一个对象。 请记住,每个类的已编译代码都存在于其自己的单独文件中。 在需要代码之前,不会加载该文件。 通常,您可以说“类代码在首次使用时加载。”这通常是在构造该类的第一个对象时,但是在访问静态字段或静态方法时也会发生加载。

如果您无法从本地历史记录恢复。 然后你就失去了运气。 使用源控制管理工具(如SVN或Git)可以避免下次出现此类意外情况。

如果您有源文件尝试在控制台或其他IDE中单独编译文件以及依赖项并复制该类文件让错误成为错误现在编辑eclipse中的源文件尝试再次构建。 希望这不会起作用,因为即使eclipse也会忽略在构建Project时重新编译某些文件。 更好的尝试。

您确定此源文件位于项目的源集中吗? 因为在这种情况下Eclipse只会编译并将其放在类路径中。 右键单击Package Explorer中的项目, Properties – > Java Build Path – > Source 。 封闭文件夹应该在那里或Eclipse不会编译它。

比如说,你的这个源文件曾经是源代码集,并且经过编译可以解释为什么它在你删除二进制文件之前一直在运行。

为了不发生这个问题,我建议在清理项目时选择Scrub输出文件夹 Java菜单中选择– >编译器 – > 自动 构建构建…在项目菜单中。

还要确保项目编译/构建成功,否则Eclipse可能无法编译所有类。

如果它仍然没有帮助,那么您遇到问题的项目类型可能很重要:Java项目,Maven项目,Gradle项目等。

对于那些放弃了这个计划的人,也许你可以将你所有的更改提交到你拥有的代码存储库,退出eclispe之后只需删除整个工作区,然后创建一个新的工作区并将所有文件重新导入到新工作区中。你的代码库。