首页 / 知识
为什么在Java中收到NoClassDefFoundError?
2023-04-13 14:54:00
Why am I getting a NoClassDefFoundError in Java?
运行Java应用程序时得到 尽管这可能是由于编译时和运行时之间的类路径不匹配导致的,但不一定是正确的。 在这种情况下,请务必牢记两个或三个不同的异常:
当您的代码依赖于一个类文件,并且该类文件在编译时存在但在运行时未找到时,会导致这种情况。在构建时间和运行时类路径中寻找差异。
这是说明 NoClassDefFoundErrorDemo.java
SimpleCalculator.java
Java中的NoClassDefFoundError 定义: Java虚拟机无法在运行时找到编译时可用的特定类。 如果一个类在编译期间存在,但在运行时在java classpath中不可用。
例子: NoClassDefFoundError的一个简单示例是类属于丢失的JAR文件,或者未将JAR添加到类路径中,或者有时有人更改了jar的名称,例如我的同事之一将tibco.jar更改为tibco_v3.jar,程序是java.lang.NoClassDefFoundError失败,我想知道怎么了。 只需尝试在您认为可以使用的类路径上显式地使用-classpath选项即可运行,如果可以正常运行,那么这肯定是有人重写Java类路径的简短标志。 可能的解决方案: 资源: 解决NoClassDefFoundError的3种方法 java.lang.NoClassDefFoundError问题模式 我发现有时使用在运行时发现的类的不兼容版本编译代码时,有时会出现NoClassDefFound错误。我记得的特定实例与apache轴库有关。我的运行时类路径上实际上有2个版本,并且它选择的是过时且不兼容的版本,而不是正确的版本,从而导致NoClassDefFound错误。这是在命令行应用程序中,我在其中使用与此类似的命令。
我能够使用以下命令获取正确的版本:
这是我到目前为止发现的最佳解决方案。
假设我们有一个名为
并且定义此软件包的文件实际存储在目录
文件结构将如下所示:
调用Java时,我们指定要运行的应用程序的名称: 我在Maven中使用Spring Framework,并在我的项目中解决了此错误。 该类中存在运行时错误。我正在将属性读取为整数,但是当它从属性文件读取值时,其值是两倍。
Spring并没有给我完整的堆栈跟踪信息,表明运行失败的那一行。 @xli的答案使我深入了解了我的代码中可能存在的问题。 当运行时类加载器加载的类无法访问Java rootloader已加载的类时,出现NoClassFoundError。由于不同的类加载器位于不同的安全域中(根据Java),因此jvm不允许在运行时加载器地址空间中解析由根加载器加载的类。 使用" java -javaagent:tracer.jar [您的Java插件]"运行程序 它产生的输出显示已加载的类,以及加载该类的加载器env。跟踪为什么无法解析类非常有用。
尤其是如果您在UNIT TESTS中看到
您可能会看到很多
当您在UNIT TESTS中看到
在某种程度上,您是在测试之间"共享" 如果您已生成代码(EMF等),则可能有太多静态初始化程序占用所有堆栈空间。 请参见堆栈;溢出问题;如何增加Java堆栈大小? 以下技术对我有很多帮助:
其中,TheNoDefFoundClass是由于对程序使用的同一个库的较旧版本的偏好而可能"丢失"的类。这种情况最常发生在以下情况中:将客户端软件部署到一个占主导地位的容器中,并带有其自己的类加载器和成千上万个最流行的lib的古代版本。 我通过禁用所有模块的preDexLibraries解决了我的问题:
当静态初始化程序尝试加载运行时不可用的资源束时,例如也会出现
也可能是因为您从IDE复制具有特定程序包名称的代码文件,并想尝试使用终端运行它。您必须首先从代码中删除程序包名称。
如果有人是因为 同一项目的两个不同的结帐副本
就我而言,问题是Eclipse无法区分同一项目的两个不同副本。我有一个锁定在主干(SVN版本控制)上,而另一个则一次在一个分支中工作。我尝试将工作副本中的一个更改作为JUnit测试用例进行了测试,其中包括将一个私有内部类单独提取为一个公共类,并且在工作时,我打开了该项目的另一个副本以查看其他内容。需要更改的部分代码。在某个时候, 关闭项目的主干副本并再次运行测试用例解决了这个问题。 此错误可能是由于未经检查的Java版本要求引起的。 就我而言,通过使用SDKMAN!从Java 9切换到Java 8,在构建备受瞩目的开源项目时,我能够解决此错误。
然后按照以下说明进行全新安装。 当使用Maven作为构建工具时,有时会很有帮助-通常令人欣喜的是,在禁用测试的情况下进行全新的"安装"构建。
现在,所有内容均已构建并安装,您可以继续运行测试。
当我没有在项目的Java Build Path的" Order and Export"选项卡上导出类时,出现NoClassDefFound错误。确保在添加到项目的构建路径中的所有依赖项的"订单和导出"选项卡中打上对勾。请参阅Eclipse警告:XXXXXXXXXXX.jar将不会导出或发布。运行时ClassNotFoundExceptions可能会导致。
Java无法在运行时中找到类A。 问题消失了。 我遇到了同样的问题,而且库存很多小时。 我找到了解决方案。在我的情况下,因此定义了静态方法。 JVM无法创建该类的另一个对象。 例如,
从SRC库中删除了两个文件后,我收到了此消息,当我将它们放回时,我一直看到此错误消息。 我的解决方案是:重新启动Eclipse。从那时起,我再也没有看到此消息:-)
确保在
|
最新内容
相关内容
Python 中如何处理文件系统路径
Python 中如何处理文件系统路径,名称,路径,培训,系统,结果,斜杠,函数,所在,绝对路径,目录,1不同操作系统分隔符在Windows操作系统中,文件路径python模块搜索路径
python模块搜索路径,标准,路径,模块,位置,系统,培训,通用,新增,文件,环境变量,在a.py中导入模块b的时候,python会做一系列的模块文件路径搜索Python相对路径导入
Python相对路径导入,培训,路径,绝对路径,方式,模块,上面,文件,示例,变量,语句,注:如果允许,不要使用相对路径导入,很容易出错,特别是对新手而言。python 编译
python 编译,标准,指标,异常,网络,培训,函数,字符串,模型,标识符,损失,在训练模型之前,我们需要通过compile来对学习过程进行配置,compile接收解释型语言python和编译型语言
解释型语言python和编译型语言,平台,环境,培训,语言,程序,文件,机器码,效率,定义,操作系统,首先Python是一门解释型语言,计算机是不能识别高python 编译器
python 编译器,代码,培训,统一,异常,对象,字节,文件,编译器,类型,结果,执行pythondemo.py后,将会启动Python的解释器,然后将demo.py编译成一个python为啥运行效率不高
python为啥运行效率不高,工作,代码,不了,地址,情况,项目,第三,业务,策略,培训,python运算效率低,具体是什么原因呢,下列罗列一些:原因:1、pythonpython中获取路径的三种方法
python中获取路径的三种方法,工作,代码,情况,培训,下来,路径,文件,也就是,桌面,目录,python中获取路径总结下来分为三种情况:1、获取工作目录python读取中文路径失败怎么解决?
python读取中文路径失败怎么解决?,培训,路径,中文,裤子,下面,以上,全部,格式,方法,更多,编码问题可能导致python读取中文路径时出错,使python怎么计算python程序运行时间
怎么计算python程序运行时间,时间,培训,程序,方式,脚本,下面,以上,两个,结束,不是,python脚本使用统计时间的方式是time.clock(),而这种方式统Python可以做桌面应用程序吗
Python可以做桌面应用程序吗,平台,系统,较大,标准,培训,界面,桌面,文档,入门,开发者,python可以做桌面应用程序!目前比较主流的几个GUI平台:1Python怎么运行shell脚本
Python怎么运行shell脚本,培训,命令,文件,方法,脚本,文件夹,对象,建议,结果,内容,Python作为一门脚本语言,有时候需要与shell命令交互式使用,在