如何解决Java.lang.NoClassDefFoundError

 我来答
护花EB92HL34
2012-10-25 · TA获得超过120个赞
知道答主
回答量:39
采纳率:0%
帮助的人:10.2万
展开全部
在JAVA开发中,main线程中抛出java.lang.NoClassDefFoundError是一个非常普遍且比较难解决的问题。解决这个问题的复杂性主要取决于你的软件大小和中间件部署情况,尤其要考虑在应用中出现的数量众多的classloader的情况。
本文将从一个比较高的角度看这个问题,主要是介绍java classloader机制。
我们先简单的看一下这个问题,这个runtime异常是JVM抛出的,当JVM发现一个classloader试图去Load一个class,而此class在当前的classloader tree中找不到的时候,就会抛出此异常。
很明显,这个问题是运行期的问题,在编译期一切正常。
ok,到这里还不行,这个问题解决起来不是那么容易的,在运行期的程序classpath中加入缺少的jar包仅仅是一种解决方法。关键是,我们必须掌握此种异常的根本原因,以后解决此问题就可以以不变应万变。这就是我写这个文章的初衷。
现在,先记住,此问题不一定是由于在classpath中缺少class的定义。
java classloader概述
在深入分析之前,我们必须掌握java classloader的基本原理。class loader是一个java对象,它负责load所有的class,负责查找、加载、生成一个class的基本定义信息。classloader自身采用了委托代理机制来查询class,每一个classloader的实例都有一个父classloader,所以,当一个应用的classloader去加载class A的时候,首先发生的事情是classloader委托其父classloader去加载class A,经过一串链式查找后,最终任务会落在JVM的系统启动classloader上。
那哪里会出问题?当你期望你的应用classloader能加载class A,但是当class A被其任意一个父classloader查询到并加载,那么就可能会出现java.lang.NoClassDefFoundError。当所有的父classloader都找不到class A的时候,才会由应用自己的classloader尝试加载。
王叔叔喝的高
2018-04-13 · TA获得超过7164个赞
知道小有建树答主
回答量:40
采纳率:0%
帮助的人:5382
展开全部

在Java开发中,我们经常碰到java.lang.NoClassDefFoundError这样的错误,而且我们很容易把java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误搞混,事实上这两个错误是完全不同的。我们往往花费时间去不断尝试一些其他的方法去解决这个问题,而没有真正去理解这个错误的原因。这篇文章就是通过解决NoClassDefFoundError错误处理的经验分享来揭开NoClassDefFoundError的一些秘密。NoClassDefFoundError的错误并非不能解决或者说很难解决,只是这种错误的表现形式很容易迷惑其他的Java开发者

关于产生这个问题的原因,早些时候我装过HP的UFT(以前版本叫QTP),它这个软件带了自己的java,并且会把自己的java添加到环境变量之中,比如图里这样

<img src="http://pic3.zhimg.com/v2-f1ec24b9866476275b96b2ffe9f9d29e_b.jpg" data-caption="" data-rawwidth="380" data-rawheight="111" class="content_image" width="380">

我看它在系统变量里面添加了好几个相关的,比如IBM_JAVA_OPTIONS之类的,在用户的环境变量里也有添加,因为暂时用不到这个软件,所以我就把相关的环境变量全删了,在启动eclipse就可以用了。

所以呢,你可以查看一下自己的环境变量里,是否有其他软件添加的java相关的环境变量,有的话酌情处理一下试试,或许有效。

还有,你得先要保证自己装的java是有效的。




本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaoshu_liyun
2017-12-10
知道答主
回答量:1
采纳率:0%
帮助的人:926
展开全部
如果是新建好的maven项目,你可以尝试一下,project上clean一下,然后把所有模块maven install,然后再按alt+f5,update一下,最后tomcat,clean一下,再次启动。我的就是这样解决的。其中“alt+f5”是关键。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式