线程“ main”中的异常java.lang.NoClassDefFoundError是开发Java EE企业版或独立Java应用程序时可能会遇到的常见难题之一。 根本原因分析和解决过程的复杂性主要取决于Java EE中间件环境的大小。 特别是考虑到各种Java EE应用程序中存在大量的ClassLoader。

我向您建议的一系列文章将为您提供有关如何解决和解决此类问题的逐步方法。 我还将分享我在过去10年中观察到的最常见的Java NoClassDefFoundError问题模式。 还将提供示例Java程序,以简化您的学习过程。 我也鼓励您发表评论,分享您的问题案例,并就此问题向我提出任何问题。
该系列的第1部分将重点概述此Java运行时错误以及Java ClassLoader概述。

java.lang.NoClassDefFoundError –这是什么?

现在让我们开始对此问题进行简单的概述。 当ClassLoader尝试加载类的定义( 在您的应用程序代码等中引用的类)并且在当前ClassLoader树中找不到此类定义时,JVM会抛出此运行时错误。

基本上,这意味着此类Class定义是在编译时找到的,而在runtime时找不到的。

很简单,如何将缺少的类添加到类路径中呢?

嗯,不是那么快,这种类型的问题并不是那么容易解决。 将缺少的Class / JAR添加到运行时应用程序classpath / ClassLoader只是许多可能的解决方案之一。 关键是首先执行适当的根本原因分析。 这就是为什么我要创建整个系列。
现在,只需记住,这个错误并不一定意味着你缺少从你的“期望”类路径或ClassLoder这个类定义,所以请不要认为在这一点上任何东西。

Java ClassLoader概述

在继续进行之前,对Java ClassLoader原理有很高的了解是非常重要的。 经常调试NoClassDefFoundError问题的人很挣扎,因为他们缺乏对Java ClassLoader原理的正确了解和理解。 阻止他们查明根本原因。

类加载器是负责加载类的Java对象。 基本上,类加载器会尝试查找或生成构成该类定义的数据。 要理解的关键点之一是,默认情况下,Java类加载器使用委托模型来搜索类。 每个ClassLoader实例都有一个关联的类加载器。 因此,假设您的应用程序类加载器需要加载类A。它将尝试做的第一件事是,在尝试查找类A本身之前,将对类A的搜索委托其父类加载器。 您最终可以得到一个大型类加载器链,其中包含许多父类加载器,直至JVM系统类路径引导类加载器。

问题是什么? 好吧,如果从某个特定的父类加载器中找到了A类,那么如果希望应用程序(子类)加载A类,则该父类将为NoClassDefFoundError打开大门。 例如,第三方JAR文件依赖项只能存在于您的应用程序子类加载器中。

现在,让我们在Java EE企业环境的上下文中可视化整个过程,以便您更好地理解。

如您所见,子类加载器(Web应用程序)加载的任何代码都将首先委托给父类加载器(Java EE App)。 然后,此类父类加载器将委派给JVM系统类路径类加载器。 如果未从任何父类加载器中找到此类,则子类加载器将加载该类(假设已找到该类)。

请注意,Java EE容器(例如Oracle Weblogic)具有重写此默认类加载器委托行为的机制。 我将在以后的文章中再次讨论。

请随时发表您对到目前为止所学知识的任何评论或问题。 第2部分很快就会发布。

参考: java.lang.NoClassDefFoundError:如何解决–第1部分来自我们的JCG合作伙伴 Pierre-Hugues Charbonneau,位于Java EE支持模式和Java教程博客。

翻译自: https://www.javacodegeeks.com/2012/06/javalangnoclassdeffounderror-how-to.html

java.lang.NoClassDefFoundError:如何解决–第1部分相关推荐

  1. java 504错误怎么解决_求助java.lang.NoClassDefFoundError怎么解决,报错信息如下

    求助java.lang.NoClassDefFoundError怎么解决,报错信息如下 四月 14, 2018 11:03:07 上午 org.apache.catalina.startup.Embe ...

  2. java.lang.NoClassDefFoundError异常解决

    java.lang.NoClassDefFoundError异常解决 这个异常通俗的解释就是编译通过,能找到对应的依赖,但是运行时候却找不到相应的类.只会在运行时出现这个异常,这种问题的调试和解决都涉 ...

  3. java 运行 出现选择_Eclipse 运行出现java.lang.NoClassDefFoundError的解决方法

    上篇博文也提到了这个问题,但没有深入的讲解.这次特意做了整理,详细解释其原因. 先看错误java.lang.NoClassDefFoundError,显然是java虚拟机找不到指定的类,多数情况下是外 ...

  4. 【ERROR】java java.lang.NoClassDefFoundError 的解决办法(全)

    一 第一种,也是新手容易犯的错误,那就是classpath环境变量配置错误.这个错误在我最开始学习android的时候就遇到过,弄的焦头烂额的. 解决办法: 在系统环境变量那一栏中点->新建cl ...

  5. linux下java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider解决方法

    linux下java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider解决方法 参考文章: ( ...

  6. 如何解决java.lang.NoClassDefFoundError:Java 9中的javax / xml / bind / JAXBException

    本文翻译自:How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException in Java 9 I have s ...

  7. java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector解决方法

    java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector解决方法 错误描述:java.lang.NoClassDefFoundErro ...

  8. java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext崩溃解决

    java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext 崩溃了,这到底咋整啊?我弄了快8个小时了, ...

  9. 怎么解决java.lang.NoClassDefFoundError错误

    前言 在日常Java开发中,我们经常碰到Java.lang.NoClassDefFoundError这样的错误,需要花费很多时间去找错误的原因,具体是哪个类不见了?类明明还在,为什么找不到?而且我们很 ...

  10. 解决Tomcat下IntelliJ IDEA报错java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener

    解决Tomcat下IntelliJ IDEA报错java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener   笔者在做代 ...

最新文章

  1. 数据库运维平台~开源成熟项目
  2. input添加disabled属性出现的移动端兼容问题
  3. 钉钉微应用的开发——主前端
  4. LNMP 环境遇到的权限问题
  5. (转)淘淘商城系列——内容管理
  6. 多标签分类的评价指标
  7. web安全day26:今天,算是把linux的用户管理弄明白了
  8. PHP中json_encode 中文解决方法
  9. python需要学数据结构吗_我也要学python-内置数据结构(一)
  10. 使用第三方插件Curvy为unity场景快速生成运动轨迹与赛道
  11. kwgt 歌词_跪求完整版伪物语OP2白金迪斯科的中文,日文,罗马音三合一的歌词!!!...
  12. 养成备份的习惯的重要性
  13. React Native组件(三)Text组件解析
  14. Xposed FrameWork v89 安装
  15. [虚幻引擎] UE4/5数字孪生 制作城市光束效果
  16. 普通投资者如何进行量化投资
  17. 推荐几个电脑超级实用的电脑软件 方便实用
  18. 日常英语口语收集汇总
  19. python操作CAD转存dwg文件
  20. 大数据的架构设计与未来

热门文章

  1. 转自: SparkConf 配置的概念和用法
  2. Redis两种客户端:lettuce和Jedis的区别
  3. aws 数据库迁移_AWS Loft的数据库周
  4. spock测试_将Spock 1.3测试迁移到Spock 2.0
  5. jcg q8 固件_JCG学院开设了Java设计模式课程!
  6. JDK 14:CMS GC是OBE
  7. 在浏览器中在线尝试无服务器框架项目!
  8. Java 12:开关表达式
  9. lucene 多个分词查找_使用Lucene的新FreeTextSuggester查找长尾建议
  10. Eclipse GlassFish 5.1就在这里!