Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Eclipse中重新构建已删除的类文件_Java_Eclipse_Class_Build_Compilation - Fatal编程技术网

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

Java 在Eclipse中重新构建已删除的类文件,java,eclipse,class,build,compilation,Java,Eclipse,Class,Build,Compilation,我无意中删除了项目中的一个.class(Java字节码)文件(在文件系统上,而不是使用Eclipse本身)。很容易修复,对吗?只要重建它。但那不行!即使我从“Project”菜单中选择了“Build Project”或“Build All”或“Build Automatically”,文件系统上实际上什么也没有发生,我仍然得到: Exception in thread "main" java.lang.NoClassDefFoundError 我只想从我已有的源代码中重新编译它 顺便说一下,当

我无意中删除了项目中的一个.class(Java字节码)文件(在文件系统上,而不是使用Eclipse本身)。很容易修复,对吗?只要重建它。但那不行!即使我从“Project”菜单中选择了“Build Project”或“Build All”或“Build Automatically”,文件系统上实际上什么也没有发生,我仍然得到:

Exception in thread "main" java.lang.NoClassDefFoundError
我只想从我已有的源代码中重新编译它


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

您确定此源文件位于项目的源集中吗?因为在这种情况下,Eclipse只会编译并将其放入类路径中。右键单击包资源管理器中的项目,属性->Java构建路径->源代码。封闭文件夹应该在那里,否则Eclipse不会编译它

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

为了避免这个问题发生,我建议在清理项目时,在项目菜单中的Java->Compiler->BuildingBuild automatically…中选择清理输出文件夹

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

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

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

2) 删除相关的.class文件

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

4) 不要为此使用自动生成,而是手动选择仅断开的项目,并执行清理(如果存在依赖项)


如果失败了,最好打包源代码并作为新项目重新导入。为了避免在可能出现的IDE错误上浪费时间,在更传统的语言中,程序是作为启动过程的一部分一次加载的。Java没有这个问题,因为它采用不同的加载方法。这是变得更容易的活动之一,因为Java中的一切都是对象。请记住,每个类的编译代码都存在于它自己的单独文件中在需要代码之前不会加载该文件。一般来说,您可以说“类代码在第一次使用时加载”。这通常是在构造该类的第一个对象时进行的,但在访问静态字段或静态方法时也会进行加载

如果无法从本地历史记录中恢复。那你就不走运了。使用诸如SVN或Git之类的源代码管理工具来避免下次出现这种意外情况


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

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


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


关于赏金

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

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

如果OP的答案不能解决您的问题,您应该在新帖子上提出更具体的问题,描述您的尝试以及OP的解决方案如何无法解决您的具体问题

也就是说,假设您确实尝试了OP发布的解决方案,可能是另一个问题(不是由于删除类文件引起的)导致了相同的错误。因为你开始悬赏别人的问题,你不能收回你的威望,我认为值得一提的是,确保你的JDK版本在项目中使用的旧的或外部源代码之间兼容是值得的。当编译器在代码中引用在不兼容JDK上开发的库中定义的对象/类时,会出现相同的错误
NoClassDefFoundError
,即缺少在JDK版本中找不到的关键内部依赖项


我想说得更详细一些,但由于这个问题是关于删除类文件时发生的错误,我觉得这样做是不对的。

对于发布bount的人,也许你可以将所有更改提交到你拥有的代码库中,在退出eclispe后,只需删除整个工作区,然后创建一个新的工作区,并将所有文件从代码存储库重新导入新的工作区

您可能需要“刷新”项目,以便将Eclipse的视图与文件系统中的实际内容同步。您可以手动删除所有.class文件(或者更好,只需将它们放在另一个文件夹中),然后进行重建。如果这不起作用,那么肯定有比您意识到的更多的东西(例如,某个地方有一个链接的.jar/.dll文件阻止构建)。当您进行一个干净的构建时,eclipse应该显示一个“构建”。