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

如何解决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路径的时候出现问题了,如出现空格或下划线而不能识别,导致报此类的错误

相关推荐

    java.lang.NoClassDefFoundError

    在Java编程过程中遇到`java.lang.NoClassDefFoundError`是一个常见的问题,这种异常通常发生在试图加载一个类时,该类在编译时是存在的,但在运行时却未能找到其定义。这种错误常常让人困惑,因为它的发生往往与编译...

    Android 出现:java.lang.NoClassDefFoundError…错误解决办法

    在Android开发过程中,有时会遇到一个令人困惑的错误——`java.lang.NoClassDefFoundError`。这个错误通常意味着在运行时找不到某个类的定义,即使编译时该类是可用的。在本例中,问题出在一个特定的情景:在Android...

    JavaMail抛java.lang.NoClassDefFoundError (comsunmailutilLineInputStream)异常解决方案

    JavaMail在进行电子邮件发送时,可能会遇到`java.lang.NoClassDefFoundError`异常,特别是当尝试使用`com.sun.mail.util.LineInputStream`类时。这个异常通常表示在运行时找不到某个类的定义,即使该类在编译时是...

    java.io.CharConversionException: isHexDigit 出现错误的原因及其解决办法

    在Java的标准库中,并没有内置的`isHexDigit`函数,但在一些自定义的代码或者第三方库中可能会看到这个函数,它的作用是验证输入的字符是否能作为十六进制数的一部分。 问题可能出在以下几个方面: 1. **编码不...

    解决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...

    spark-core_2.11-1.5.2.logging.jar解决spark升级没有log的jar包

    ### Spark升级后遇到`java.lang.NoClassDefFoundError: org/apache/spark/Logging`问题解决方案 #### 一、问题背景及现象 在升级Spark至2.1版本之后,在使用streaming-kafka进行测试时,遇到了`java.lang....

    com.fasterxml.jackson

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

    derby_ui_plugin_1.1.1

    此外,由于Derby是Java的一部分,熟悉它还可以帮助开发者深入理解Java的内存管理和多线程特性,从而更好地应对复杂的系统设计挑战。总之,Derby UI Plugin 1.1.1是Java开发者提高工作效率,简化数据库管理的有效工具...

    在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 第...

    Sqoop 导入数据异常处理

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

    JDOMException错误解决办法

    从题目给出的部分内容中,可以看到一个具体的错误示例:“java.lang.NoClassDefFoundError: org/jdom/JDOMException”。这个错误表示在运行时找不到`JDOMException`这个类,通常是由于类路径(classpath)配置问题导致...

    bcpkix-jdk15on-1.49.rar

    描述中提到的问题“java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider”是一个常见的Java运行时错误,通常表示在程序运行时找不到某个类的定义。在这个特定情况下,系统无法找到...

    Struts2运行经常遇见的异常描述

    在使用 Struts2 的 Dojo 插件时,如果缺少必要的 JAR 包 `struts2-dojo-plugin-2.1.2.jar`,将会出现 `java.lang.NoClassDefFoundError` 异常。这是因为 Struts2 Dojo 插件中的 `HeadTag` 需要渲染 JavaScript 代码...

    java面向对象程序设计第二版课后答案.docx

    - 执行`java Xiti8.class`时出现的错误提示`Exception in thread "main" java.lang.NoClassDefFoundError: Xiti8/class`:表示类路径中找不到类`Xiti8/class`。 - 正确执行`java Xiti8`得到的输出结果为`I'm glad ...

    javaee架包

    解决"java.lang.NoClassDefFoundError"的问题通常涉及以下几个步骤: 1. 检查是否所有必要的JAR文件都在Tomcat的`lib`目录下,包括JavaEE和JSF的库。 2. 确认应用的类路径设置正确,尤其是在使用IDE进行开发时,确保...

    2022年初学Java的备忘录Java教程.docx

    通过本文档的学习,初学者不仅能够了解如何正确配置Java开发环境,还能掌握解决常见错误的方法、编写第一个Java程序的步骤以及一些基础的Java语法概念。这对于初学者来说是非常宝贵的资源,有助于快速入门Java编程。

    java-package与import机制

    然而,对于初学者而言,在尝试执行`java HelloWorld`时,很可能会遇到`java.lang.NoClassDefFoundError`这样的错误提示,这对于初学者来说无疑是一个不小的挑战。 为了解决这个问题,并帮助初学者更好地理解Java的`...

    java异常exception

    `java.lang.NullPointerException` `NullPointerException`是当程序尝试访问一个为`null`的对象实例的字段、调用其方法或构造函数时抛出的异常。这种异常通常发生在程序员错误地假设某个引用总是指向一个有效的...

    Java入门及faq__1(1)

    **2.1 编写第一个Java程序** 创建一个类并保存为`.java`文件。注意: - 文件名必须与类名一致。 - 使用记事本编辑时,保存时选择“所有文件”类型。 - 文件名后加上引号以避免自动添加`.txt`扩展名。 **2.2 常见...

Global site tag (gtag.js) - Google Analytics