精华内容
下载资源
问答
  • NoClassDefFoundError

    千次阅读 2019-11-19 12:06:59
    首先介绍下大家比较熟悉的ClassNotfoundException异常,然后对比下NoClassDefFoundError和ClassNotFoundException,最后主要说明下NoClassDefFoundError发生的原因、情况、一般处理办法。 ClassNotfoundException...

    前言

    首先介绍下大家比较熟悉的ClassNotfoundException异常,然后对比下NoClassDefFoundError和ClassNotFoundException,最后主要说明下NoClassDefFoundError发生的原因、情况、一般处理办法。

     

    ClassNotfoundException

    java开发中经常遇到java.lang.ClassNotfoundException异常,ClassNotfoundException异常一般就是编译时找不到类,Console台就会输出异常信息。一般情况下,在项目中引入一下相对应的jar包文件,让项目重新编译一遍 就ok。

     

    NoClassDefFoundError和ClassNotFoundException区别

    我们经常被java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError这两个错误迷惑不清,尽管他们都与Java classpath有关,但是他们完全不同。NoClassDefFoundError发生在JVM在动态运行时,根据你提供的类名,在classpath中找到对应的类进行加载,但当它找不到这个类时,就发生了java.lang.NoClassDefFoundError的错误,而ClassNotFoundException是在编译的时候在classpath中找不到对应的类而发生的错误。ClassNotFoundException比NoClassDefFoundError容易解决,是因为在编译时我们就知道错误发生,并且完全是由于环境的问题导致。而如果你在J2EE的环境下工作,并且得到NoClassDefFoundError的异常,而且对应的错误的类是确实存在的,这说明这个类对于类加载器来说,可能是不可见的。

     

    NoClassDefFoundError发生原因

    NoClassDefFoundError错误的发生,是因为Java虚拟机在编译时能找到合适的类,而在运行时不能找到合适的类导致的错误。例如在运行时我们想调用某个类的方法或者访问这个类的静态成员的时候,发现这个类不可用,此时Java虚拟机就会抛出NoClassDefFoundError错误。与ClassNotFoundException的不同在于,这个错误发生只在运行时需要加载对应的类不成功,而不是编译时发生。很多Java开发者很容易在这里把这两个错误搞混。

    简单总结就是,NoClassDefFoundError发生在编译时对应的类可用,而运行时在Java的classpath路径中,对应的类不可用导致的错误。

     

    NoClassDefFoundError问题解决

    NoClassDefFoundError的错误是因为在运行时类加载器在classpath下找不到需要加载的类,所以我们需要把对应的类加载到classpath中,或者检查为什么类在classpath中是不可用的。发生的可能原因如下:

    1. 对应的Class在java的classpath中不可用;
    2. 用jar命令运行你的程序情况下,可能类并没有在jar文件的manifest文件中的classpath属性中定义
    3. 可能程序的启动脚本覆盖了原来的classpath环境变量
    4. 因为NoClassDefFoundError是java.lang.LinkageError的一个子类,所以可能由于程序依赖的原生的类库不可用而导致
    5. 检查日志文件中是否有java.lang.ExceptionInInitializerError这样的错误,NoClassDefFoundError有可能是由于静态初始化失败导致的
    6. 如果你工作在J2EE的环境,有多个不同的类加载器,也可能导致NoClassDefFoundError

     

    具体解决办法:

    1. 当发生由于缺少jar文件,或者jar文件没有添加到classpath,或者jar的文件名发生变更会导致java.lang.NoClassDefFoundError的错误。
    2. 当类不在classpath中时,这种情况很难确切的知道,但如果在程序中打印出System.getproperty(“java.classpath”),可以得到程序实际运行的classpath
    3. 运行时明确指定你认为程序能正常运行的 -classpath 参数,如果增加之后程序能正常运行,说明原来程序的classpath被其他人覆盖了。
    4. NoClassDefFoundError也可能由于类的静态初始化模块错误导致,当你的类执行一些静态初始化模块操作,如果初始化模块抛出异常,哪些依赖这个类的其他类会抛出NoClassDefFoundError的错误。如果你查看程序日志,会发现一些java.lang.ExceptionInInitializerError的错误日志,ExceptionInInitializerError的错误会导致java.lang.NoClassDefFoundError: Could not initialize class。

     

    参考文章:

    how classpath work in java

    3 ways to solve java.lang.NoClassDefFoundError in Java J2EE

    When a class is loaded and initialized in JVM

    类加载器的工作原理

    展开全文
  • 最近在Linux上的eclipse中运行java程序出现了这样的错误,弄了很久用了以下三种方法终后终于成功运行了,分享下,希望能帮助到... java.lang.NoClassDefFoundError: org/apache/commons/configuration/Configurat...

    欢迎各位关注我的个人微信公众号:赶令,将会定期更新大数据相关知识及个人心得

    最近在Linux上的eclipse中运行java程序出现了这样的错误,弄了很久用了以下三种方法终后终于成功运行了,分享下,希望能帮助到大家。
    Linux运行java程序提示错误:

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/configuration/Configuration
    	at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.<init>(DefaultMetricsSystem.java:38)
    	at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.<clinit>(DefaultMetricsSystem.java:36)
    	at org.apache.hadoop.security.UserGroupInformation$UgiMetrics.create(UserGroupInformation.java:136)
    	at org.apache.hadoop.security.UserGroupInformation.<clinit>(UserGroupInformation.java:256)
    	at org.apache.hadoop.mapreduce.task.JobContextImpl.<init>(JobContextImpl.java:72)
    	at org.apache.hadoop.mapreduce.Job.<init>(Job.java:145)
    	at org.apache.hadoop.mapreduce.Job.getInstance(Job.java:188)
    	at org.apache.hadoop.mapreduce.Job.getInstance(Job.java:207)
    	at com.hpsk.bigdata.offline.analystics.etl.ETLTestDriver.run(ETLTestDriver.java:49)
    	at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    	at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
    	at com.hpsk.bigdata.offline.analystics.etl.ETLTestDriver.main(ETLTestDriver.java:158)
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.configuration.Configuration
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    	... 12 more
    

    eclipse上运行java程序提示 Exception in thread “main” java.lang.NoClassDefFoundError

    • 错误原因
    1. 可能程序中导错包了,解决:到程序中找到对应的方法的包进行更改
    2. 可能没有这个jar包,解决:选中项目->右击->run as->maven clean,清空缓存,再选中项目->右击->run as->maven build…
    3. 如果有这个jar包报错,可能是因为jar包不全,缺少某些依赖或其他的,解决:找到jar包目录进行删除,重新下载,
    • 第二种情况:
      先可以在maven中update试下:选中项目->右击->maven->Update Project

    这里写图片描述

    如果update还不行再进行clean后build

    这里写图片描述

    这里写图片描述

    第三种情况:
    如果在build中出现类似于这样的提示:

    [ERROR] error reading /home/rdedu1/.m2/repository/commons-digester/commons-digester/1.8/commons-digester-1.8.jar; error in opening zip file
    [ERROR] error reading /home/rdedu1/.m2/repository/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.jar; error in opening zip file
    [ERROR] error reading /home/rdedu1/.m2/repository/commons-beanutils/commons-beanutils-core/1.8.0/commons-beanutils-core-1.8.0.jar; error in opening zip file
    [ERROR] error reading /home/rdedu1/.m2/repository/com/thoughtworks/paranamer/paranamer/2.3/paranamer-2.3.jar; error in opening zip file
    

    解决方法:
    使用rm -rf jar_path命令删除相应的jar包
    例如:

    rm -rf /home/rdedu1/.m2/repository/commons-digester/commons-digester/1.8/commons-digester-1.8.jar
    

    这里写图片描述

    查询对应jar包的位置也可以在eclipse中查询:

    这里写图片描述

    删除jar包后再去mvnrepository网站中搜索相应jar的放入pom文件中自动下载
    例如:

    <!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-all</artifactId>
        <version>4.0.23.Final</version>
    </dependency>
    

    这里写图片描述

    下载完后应该就可以运行了。。。

    展开全文
  • Java基础之NoClassDefFoundError原因

    万次阅读 多人点赞 2018-03-29 16:11:53
    ClassNotfoundException java开发中经常遇到java.lang.ClassNotfoundException异常,ClassNotfoundException异常一般就是编译时找不到类,Console台就会输出异常信息。...不过一遇到NoClassDefFoundError,我...

    ClassNotfoundException

    java开发中经常遇到java.lang.ClassNotfoundException异常,ClassNotfoundException异常一般就是编译时找不到类,Console台就会输出异常信息。一般情况下,我们都会rebuild或者clean一下工程,让项目重新编译一遍。

    两个异常的区别

    不过一遇到NoClassDefFoundError,我们有时也容易和ClassNotfoundException异常混淆。虽然NoClassDefFoundError和ClassNotfoundException异常出现原因类似,都是因为编译加载不到类导致的,但是却有本质的区别。

    两者的本质区别就是:
    ClassNotfoundException时在编译时JVM加载不到类或者找不到类导致的; 

    而NoClassDefError是在运行时JVM加载不到类或者找不到类

    NoClassDefFoundError错误发生原因

    为什么会发生NoClassDefFoundError错误?
    其实就是和Java虚拟机的工作原理有关了,下面简单介绍一下JVM的类加载机制

    类加载器三个机制:委托、单一性、可见性

    委托:指加载一个类的请求交给父类加载器,若父类加载器不可以找到或者加载到,再加载这个类
    单一性:指子类加载器不会再次加载父类加载器已经加载过的类
    可见性:子类加载器可以看见父类加载器加载的所有类,而父类加载器不可以看到子类加载器加载的类

    JVM的类加载机制的委托行机制,决定了类加载器只加载一次,子类加载器不会再加载父类加载器已经加载过的类

    所有在一些特定条件下就会出现编译时可以加载到类,运行时不可以加载到类,这时候就会出现java.lang.NoClassDefFoundError异常

    NoClassDefFoundError可能出现的情况

    目前有发现几种情况
    1、一种情况就是因为静态变量加载不到原因
    2、工程里没有将jar添加到classpath,maven项目的,需要根据项目情况排查

    展开全文
  • NoClassDefFoundError问题排查

    万次阅读 2016-09-01 11:21:29
    常见原因 1、缺少依赖的jar包 ...,则编译通过,但运行时发现其他地方没有引入这个依赖会报NoClassDefFoundError错误。 2、jar包冲突 可以通过maven helper查看jar包冲突问题。也可以根据mavan传递依

    常见原因

    1、缺少依赖的jar包

    可以通过System.getProperty("java.class.path"),查看jar包是否加载到classpath中。

    jar包不存在也能编译通过的例子:maven中jar包的scope为<scope>provided</scope>,则编译通过,但运行时发现其他地方没有引入这个依赖会报NoClassDefFoundError错误。

    2、jar包冲突

    可以通过maven helper查看jar包冲突问题。也可以根据mavan传递依赖的就近获胜原则手动排查。

    可以通过this.getClass().getClassLoader().getResource(Test.class.replace(".","/")+".class")方法查看类在哪个jar包

    3、static代码块初始化失败

    jvm缓存策略:类初始化失败,会把初始化失败信息缓存起来

    展开全文
  • 怎么解决java.lang.NoClassDefFoundError错误

    万次阅读 多人点赞 2015-06-23 15:22:29
    前言在日常Java开发中,我们经常碰到java.lang.NoClassDefFoundError这样的错误,需要花费很多时间去找错误的原因,具体是哪个类不见了?类明明还在,为什么找不到?而且我们很容易把java.lang.NoClassDefFoundError...
  • NoClassDefFoundError异常

    千次阅读 2019-04-29 20:00:06
    NoClassDefFoundError原因NoClassDefFoundError和ClassNotFoundExceptionNoClassDefFoundError错误发生原因 NoClassDefFoundError和ClassNotFoundException 在java开发的过程经常会遇到这两个异常并且时常会产生混淆...
  • NoClassDefFoundError错误

    2020-07-17 19:08:34
    NoClassDefFoundError错误发生的原因: NoClassDefFoundError错误的发生,是因为Java虚拟机在编译时能找到合适的类,而在运行时不能找到合适的类导致的错误。例如在运行时我们想调用某个类的方法或者访问这个类的...
  • 关于怎么解决java.lang.NoClassDefFoundError错误

    万次阅读 多人点赞 2018-11-15 13:48:57
      五一在部署新的统一登录时,遇到...很容易把java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误搞混,事实上这两个错误是完全不同的。 NoClassDefFoundError错误发生的原因 NoC...
  • NoClassDefFoundError产生的原因有好几种,这里记录静态变量或静态块引起的。具体抛出的异常类似: java.lang.NoClassDefFoundError: Could not initialize class xxx JVM在加载类的时候,会初始化类里的静态变量,...
  • NoClassDefFoundError

    万次阅读 2018-08-06 09:55:06
    NoClassDefFoundError,这个异常在第一次使用命令行执行Java类时很可能会碰到,如下面这种情况: java -cp example.jar Example 在这个jar包里面只有一个类,这个类是net.test.Example,可能让你感到郁闷的是,...
  • ClassNotFoundException 和 NoClassDefFoundError 区别.pdf
  • NoClassDefFoundError 集合

    千次阅读 2015-11-16 22:44:16
    很多时候,我们只知道缺少什么类,但并不知道在哪个包里面,这里罗列了一些NoClassDefFoundError情况,请参考: 欢迎网友们提供自己遇到的情况,形成一个互助博客,
  • 只要编译 报 NoClassDefFoundError 错误 说明:缺少Jar包!!!
  • NoClassDefFoundError
  • NoClassDefFoundError解决

    2016-04-15 15:11:56
    打包在某些手机运行会出现错误:NoClassDefFoundError 花了好久时间排除发现Android 5.0及以下版本都有这个问题。 网上找了一下,可能是由于SDK21不支持超过65K的函数数量。 解决办法 在Application的子类中加上...
  • 主要介绍了java.lang.NoClassDefFoundError错误解决办法的相关资料,需要的朋友可以参考下
  • ClassNotFoundException和 NoClassDefFoundError

    千次阅读 2017-05-16 10:17:49
    ClassNotFoundException和 NoClassDefFoundError1. 概述java.lang.NoClassDefFoundError 和 java.lang.ClassNotFoundException 都是 Java 语言层面的异常NoClassDefFoundError :Thrown if the Java Virtual Machine...
  • Android异常之NoClassDefFoundError

    千次阅读 2019-09-03 11:34:48
    Android开发时如果出现NoClassDefFoundError异常, # main(1) java.lang.NoClassDefFoundError java.util.Objects 该异常表示找不到类定义,当JVM或者ClassLoader实例尝试装载该类的定义(这通常是一个方法调用...
  • org.springframework.web.util.NestedServletException: Handler ... nested exception is java.lang.NoClassDefFoundError: com/keyway/jpt/common/api/dto/goods/CatsDto$CatsDtoBuilder 这类问题看字面意思就是...
  • 这里写自定义目录标题加载不到HTraceConfiguration解决 加载不到HTraceConfiguration 连接Hbase数据库报错,能成功读取配置文件但是不能读取数据。 Exception in thread ...java.lang.NoClassDefFoundError: or...
  • ClassNotFoundException和NoClassDefFoundError ClassNotFoundException:发生在装入阶段。  当应用程序试图通过类的字符串名称,使用常规的三种方法装入类,但却找不到指定名称的类定义时就抛出该异常。 ...
  • 在日常Java开发中,我们经常碰到java.lang.NoClassDefFoundError这样的错误,需要花费很多时间去找错误的原因,具体是哪个类不见了?类明明还在,为什么找不到?而且我们很容易把java.lang.NoClassDefFoundError和...
  • 今天在项目中调用一个类的静态方法时,报NoClassDefFoundError。项目环境是Spring+SpringMVC,这个类没有被Spring管理。不是jar包中的类。 网上查这个错,参考的:关于怎么解决java.lang.NoClassDefFoundError错误 ...
  • 场景:使用的是jenkins 自动打包,更新代码到服务器上面,更新之后并不会自动重启服务器,更新之后就会出现各种类的NoClassDefFoundError 的异常 解决: 类都是存在的,有本地类和第三方jar包的类。都会出现这个异常...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,372
精华内容 20,148
关键字:

noclassdeffounderror