Eclipse中奇怪的“java.lang.NoClassDefFoundError”
我在Eclipse中有一个Java项目,运行良好,直到今天下午,我更新了一些文件(包括ant build.xml文件)。 当我构build项目时,出现以下错误:
java.lang.NoClassDefFoundError: proj/absa/FrontEnd/ApplicationStarter Caused by: java.lang.ClassNotFoundException: proj.absa.FrontEnd.ApplicationStarter at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) Exception in thread "main"
有没有人有问题的线索?
在Eclipse中执行Project-> Clean …为我解决了这个问题。
java.lang.ClassNotFoundException意味着CLASSPATH问题。 没有线索意味着你假设CLASSPATH设置正确,但事实并非如此。
如果使用Eclipse进行构build,请确保编译的.class文件所在的目录位于CLASSPATH中,并且包含必需的.class文件。
如果你用Ant来构build,确保你在build.xml中看到类似这样的东西:
<path id="production.class.path"> <pathelement location="${production.classes}"/> <pathelement location="${production.resources}"/> <fileset dir="${production.lib}"> <include name="**/*.jar"/> <exclude name="**/junit*.jar"/> <exclude name="**/*test*.jar"/> </fileset> </path>
更新:您的PATH中没有JAVA_HOME / bin,或者您下载了JRE而不是JDK。 检查你安装Java的目录,看你的/ bin目录是否有javac.exe。 如果您没有/ bin,请下载JDK并安装它。
如果您的系统中有javac.exe文件,请检查您的PATH以查看Java / bin目录是否位于PATH中。 一旦你设置了它,打开一个命令shell并input“javac -version”以确保一切正常。
你告诉Eclipse使用了什么JDK?
如上所述,“java.lang.ClassNotFoundException意味着CLASSPATH问题”。
在我的设置中,我正在运行Maven来构build(而不是Ant)并使用Eclipse(而不是Netbeans)。
通常,为了构build和设置项目,我将从Windows命令提示符运行“mvn clean”,“mvn compile”,“mvn eclipse:eclipse”。 最后一条命令“mvn eclipse:eclipse”更新项目configuration,创build.classpath和.project文件。
为了解决这个问题,我删除了两个文件(.classpath和.project),然后重新运行这三个命令。
因此,根据您的configuration,尝试find类path/项目文件(进行备份)并删除它们。 你也可以尝试删除目标/ release / build文件夹(不pipe是从build命令创build的)。 然后尝试再次构build/打包/configuration您的项目。
我以为我的问题和解决scheme可以帮助。所以我在我的eclipse项目中得到这个相同的错误。在我的项目中我有几个jar文件和NOCLASSDEFERROR被抛出的文件在jar文件中。
我的库文件是在我的项目heirarchy.I文件夹名称“lib”的一部分,我改变我的文件夹名称为“库”,瞧它工作。
(我看着.classpath文件,我有键值对,而我的jar文件的条目有名为“lib”的键,因此我认为可能从lib中更改可以帮助。)
这似乎是一个常见的错误。 解决scheme是:
- 右键单击项目
- select属性
- select“Java编译器”
- 取消选中“启用项目特定设置”
- 应用
- 保存
- 跑
希望这有助于在某些情况下。
我最近看到这个过于频繁。 就在今天,我遇到了与受影响(红旗)class级相同的class级问题!
退出eclipse并重新启动通常可以解决受影响的类上的红色标志,但是有时项目上会留下一个红色的标志,然后我还需要closures该项目并重新打开,以消除独立的红色标志。 在一个项目上看到一个红旗,看起来很奇怪,在它的任何子目录中都没有红旗。
使用maven项目集群,在重新启动eclipse后closures并打开集群中的所有项目。
虽然这是一个疯狂的猜测,可能不适用于你的具体情况,这可能节省了一个小时左右。
如果你已经把一个普通的项目“转换”成Java项目(通过编辑.project文件并添加适当的标签),确保你也有一个正确的指定 – 即使Eclipse试图运行没有构build器,我的项目也没有build立(成功!):
<buildSpec> <buildCommand> <name>org.eclipse.jdt.core.javabuilder</name> <arguments> </arguments> </buildCommand> </buildSpec>
我也面临同样的问题。 然后发现类path中lib文件夹的path设置不正确。
刺在黑暗中,但我有同样的确切问题。 我解决了这个问题,从我的工作区中删除项目(注意不要从磁盘删除),然后重新导入项目,它工作正常。 我认为我的是由一个错误的Windows关机造成的(重新启动Windows正确无法解决问题)。 HTH。
我发现在我的类path中有一个名为WEB-INF / lib的jar,但是当我将它升级到最新版本时,文件名是不同的。 从classpath中删除旧的jar文件并添加新的jar文件修复了这个问题。 奇怪的是,Eclipse似乎没有警告我,旧的jar文件丢失,似乎编译,但没有得到编译,因此NoClassDefFoundError。 我的线索是,build / classes目录是作为输出文件夹在项目中设置的,但在构build之后没有创build类文件。
去build立path和检查jar文件中的错误,他们可能被移动到别的地方。 如果你在jar文件上有错误。 删除它们,并通过点击添加外部jar子来find它们。
-cnufederer
确保您在项目中使用的所有库都不会从工作区中的其他项目引用。 那是我的问题。
我有一个类似的问题,它不得不与Java构buildpath引用的库; 我正在引用在更新时不再存在的库。 当我删除这些引用时,项目开始再次运行。
这些库在项目属性窗口中的Java Build Path下列出。
希望这可以帮助。
这两个问题都会因为classpathref =“master-classpath”,请检查该值是否正确
启动程序时,它会存储您可能会修改的启动configuration。 如果在构build/运行过程中发生了某些变化,则可能是设置不正确。 例如,我曾经使用maven,一些启动configuration引用一个maven2_classpath_container。 当删除启动configuration并再次运行程序时,它可以再次运行。
我看到人们已经谈到了class级的道路。 由于没有被接受的答案,我认为它与class级path无关。 所以我想补充一点,没有包的指令也会导致类没有find错误。
这在eclipse中对我有用 :
- 转到项目 – >属性
- 点击源选项卡
- 清除checkbox – >允许源文件夹的输出文件夹
- 应用更改并运行项目
java.lang.NoClassDefFoundError可能发生的另一个场合是在第一次尝试第二次/后续尝试实例化类时,第一次尝试失败,出现其他exception或错误。 类加载器似乎caching知识,它不能实例化类的第一次尝试,但没有原因。 因此它报告NoClassDefFoundError。
所以最好确保没有错误/exception,在尝试对NoClassDefFoundError进行疑难解答之前,尝试在实例化该类之前尝试实例化该类。
如果您使用Eclipse,请尝试“项目”>“清理”,然后尝试重新启动服务器
对我来说,问题是我在“运行configuration”下configuration了另一个文件夹,该文件夹没有最新的变化。 一旦我把它删除引用到正确的bin文件夹,它开始工作。 希望它可以帮助别人。
BY ABDULHAYEE:
Java中的NoClassDefFoundError出现在Java虚拟机无法在运行时find在编译期间可用的特定类。 例如,如果我们有一个来自某个类的方法调用或访问一个Class的静态成员,并且该类在运行时不可用,那么JVM将抛出NoClassDefFoundError。 理解这一点很重要,它与ClassNotFoundException不同,它只在运行时尝试加载一个类,而在运行时不是在编译时提供名称。 许多Java开发人员混合这两个错误,并感到困惑。
总之,NoClassDefFoundError会在编译时出现,但在运行时不能在java classpath中使用。 通常情况下,当你得到NoClassDefFoundError时,你会在日志中看到下面一行:线程“main”中的exceptionjava.lang.NoClassDefFoundError线程“main”中的exception只是简单地表明它的“主”线程无法find一个特定的类任何线程,所以只是不要担心。 在主线程和其他线程之间出现这个错误的区别在于,在线程“main”中的exception时,程序崩溃或者将其自身closures,而不是其他线程,在这种情况下,程序将继续运行。
阅读更多: http : //javarevisited.blogspot.com/2011/06/noclassdeffounderror-exception-in.html#ixzz2jr35SsaZ
- Eclipse webtools项目(WTP)及其性能/质量
- jar没有加载。 请参阅Servlet规范2.3,第9.7.2节。 违规类:javax / servlet / Servlet.class
- 导入android.support.v7无法parsing
- 在Eclipse项目中缺lessMaven依赖项
- Eclipse在Mac上使用Android SDK非常慢。 我怎样才能加快速度?
- 如何使用EclipsedebuggingSpring Boot应用程序?
- Eclipse语法突出显示首选项保存和恢复
- 使用Tomcat在Eclipse中运行Web服务的相同path错误的多个上下文
- Eclipse Android更改API级别