zoukankan      html  css  js  c++  java
  • 【问题解决】-《java.lang.NoClassDefFoundException》

      此问题相比与ClassNotFoundException,不容易找到,当然这两者都属于jvm加载类时的错误。导致

    NoClassDefFoundException的原因:编译时不报错,运行时在内存中找不到该类的对象。也正是这个原因,导

    致不好找到,深层次的原因我们得分析jvm加载机制,这个我会在下篇文章中发表个人愚见,这里我们就描述一

    些我们实际开发中,由于我们的哪些疏忽导致此问题出现。看到网上好多出现此类问题,如:静态变量初始化找

    不到指定文件;代码顺序问题,但我这边写了测试类均没有复现,所以此处不做说明,等遇到后再更新文档。

      场景:我们明明下载了三方jar,然后加入到构建路径,然后重新编译后,也不报错。但为何运行的时候,

    就是提示NoClassDefFoundException这个错误。其根本原因就是:引入的jar包没有在当前jar文件的

    manifest文件中的classpath属性中定义!!!

    add by weipt 20190713 还有一种情况就是,当前引入的包,没有在Import_Pachage标签下注册

      这个根据我们实际框架来看,就拿OSGI举例:其MANIFEST.MF文件中Bundle-ClassPath属性,需要我们

    引入三方jar包后,在此文件中添加,有的ide会自动添加。没有的话我们就需要手动添加。

    Manifest-Version: 1.0
    Bundle-ManifestVersion: 2
    Bundle-Name: Weipt_TEST
    Bundle-SymbolicName: Weipt_TEST;singleton:=true
    Bundle-Version: 1.0.0.qualifier
    Bundle-ClassPath: .,
     lib/dom4j-1.6.1.jar,
     lib/org.jdom_1.0.0.v200806100616.jar,
     lib/jsch-0.1.55.jar
    Bundle-Activator: com.dcfs.queue.app.Activator
    Junit-Test: com.dcfs.teller.common.test.MainTest
    Bundle-RequiredExecutionEnvironment: JavaSE-1.6
    

      欢迎指正或者补充,您的建议是我们共同进步的阶梯

  • 相关阅读:
    C++ 模板实现败者树,进行多路归并
    CentOS 7 使用 Realtek 8188eu 上网 (解决 Required key not available)
    C++ Concurrency in Action 读书笔记
    Linux操作系统是如何工作的
    大型项目使用Automake/Autoconf完成编译配置
    Socket 用于进程间通信 --- UNIX Domain Socket
    在Linux中实现类似windows中获取配置文 件的函数GetProfileString
    Linux Shell 1
    YAML
    ubuntu虚拟机如何连接到windows上安装的Navicat
  • 原文地址:https://www.cnblogs.com/weipt0106/p/10596574.html
Copyright © 2011-2022 走看看