`
vipcowrie
  • 浏览: 350990 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
1167aa84-228b-38f8-88a0-4733613efdef
让Java跑起来
浏览量:64370
文章分类
社区版块
存档分类
最新评论

如何解决Java.lang.NoClassDefFoundError--第一部分

阅读更多
在JAVA开发中,main线程中抛出java.lang.NoClassDefFoundError是一个非常普遍且比较难解决的问题。解决这个问题的复杂性主要取决于你的软件大小和中间件部署情况,尤其要考虑在应用中出现的数量众多的classloader的情况。

本文将从一个比较高的角度看这个问题,主要是介绍java classloader机制。

那么,什么是java.lang.NoClassDefFoundError呢?

我们先简单的看一下这个问题,这个runtime异常是JVM抛出的,当JVM发现一个classloader试图去Load一个class,而此class在当前的classloader tree中找不到的时候,就会抛出此异常。

很明显,这个问题是运行期的问题,在编译期一切正常。

那么,解决起来很简单,就是把jar包放到classpath下不就行了么?

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尝试加载。


第二部分:http://vipcowrie.iteye.com/blog/1562251
0
5
分享到:
评论
2 楼 mikey_5 2016-05-31  
谢谢,果然是在maven中没有引一个包导致的

ZkNoNodeException
1 楼 空杯V 2013-09-16  
也有可能是配置jar路径的时候出现问题了,如出现空格或下划线而不能识别,导致报此类的错误

相关推荐

    解决poi-ooxml3.1.X 升级 poi-ooxml4.1.2版本xwpx-1.0.6冲突问题

    poi word转pdf报java.lang.NoClassDefFoundError :org/apache/poi/POIXMLDocumentPart, 有两种方式解决 poi-ooxml3.1.X 升级 poi-ooxml4.1.2版本后与org.apache.poi.xwpf.converter.core-1.0.6.jar找不到/...

    运行jface所需要的最新jar包

    友情提示:缺少SWT包,自己去官方网站(http://www.eclipse.org/swt/)下载最新的,解决java.lang.NoClassDefFoundError: org/eclipse/core/runtime/IProgressMonitor和java.lang.NoClassDefFoundError: org/eclipse...

    在Java中轻松将HTML格式文本转换为纯文本(保留换行)

    第一步:引入Jsoup和lang和lang3的依赖: Jsoup是HTML解析器 lang和lang3这两个包里有转换所需的工具类 org.jsoup jsoup 1.11.3 commons-lang commons-lang 2.6 org.apache.commons commons-lang3 3.4 第...

    com.fasterxml.jackson

    通常来说,我们在日常开发中使用的是第3种方式,有时为了简便也会使用第2种方式,比如你要从一个很大的Json对象中只读取那么一两个字段的时候,采用databind方式显得有些重,JsonNode反而更简单。 作者:无知者云 ...

    bcpkix-jdk15on-1.49.rar

    解决java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider的架包

    《Java面向对象程序设计》(第2版)课后答案.docx

    《Java面向对象程序设计》(第2版)课后答案 《Java面向对象程序设计》(第2版)课后答案全文共39页,当前为第1页。《Java面向对象程序设计》(第2版)课后答案全文共39页,当前为第1页。Java面向对象程序设计 《Java面向...

    《Java面向对象程序设计》(第版)课后答案.docx

    《Java面向对象程序设计》(第版)课后答案 39 / 39 《Java面向对象程序设计》(第版)课后答案全文共39页,当前为第1页。《Java面向对象程序设计》(第版)课后答案全文共39页,当前为第1页。Java面向对象程序设计 《Java...

    Java Email 在Tomcat所依赖的Jar包(全部)

    在Tomcat环境下如果没有这个两个jar包会报java.lang.NoClassDefFoundError:javax/mail/Message的错误。 网上提供的下载地址: mail.jar 下载地址: http://java.sun.com/products/javamail/downloads/index.html(能进...

    MapView的使用

    第一步,当然是增加map的支持了。在Android Manifest.xml中增加以下语句: <uses-library android:name="com.google.android.maps" /> 第二步, 传说中的Layout: <?xml version="1.0" encoding="utf-8"?> ...

    关于java中package的设置

    不过习惯上我们会以class开发者的internet域名(的相反顺序)作为package名称的第一部分。比如sina的域名是:www.sina.com 。此时定义sina的package为:com.sina.*。*代表具体的class名。 下面是我在建立自己的...

    Sqoop 导入数据异常处理

    写在前面 ...解压使用会出现几个bug,之前也是出现了,... Exception in thread “main” java.lang.NoClassDefFoundError: org/json/JSONObject 解决方法: 这是因为sqoop缺少java-json.jar包 下载java-json.jar包: http

    第一个spring IOC例子(maven)

    注: applicationContext.xml 配置bean信息所依赖的class路径要一致且大小写敏感,否则运行时会出现java.lang.NoClassDefFoundError (wrong name)。 https://blog.csdn.net/my_bkn/article/details/6875481

Global site tag (gtag.js) - Google Analytics