zoukankan      html  css  js  c++  java
  • java.lang.NoClassDefFoundError: Could not initialize class xxx

    感慨:啊啊啊啊啊啊啊啊啊啊,这个问题弄了我好久,整整一天!!!

    概述:原本是调用公司自己写的jar包的工具类。在其他项目都能调用,一模一样的套用过来就是不行。问了一些同事他们也不知道怎么解决。

       然后百度上网查资料,网上大多数都是说jar包冲突,或者读不到配置文件,静态方法什么的。因为这是公司内部写的工具jar包,应该不会存在冲突的。我还是

       检查了jar包,因为我另外一个项目调这个方法是没问题的。所以我把j整个项目的jar包几乎改成和另外一个项目一样的。还是没用(中途包括网上查的先降级在升级jar什么的,都试过)。

       

       项目重启,各种clean install 重新编译还是没用。真的是奇了怪了。

       网上说读不到配置文件。我看了我那个工具类,他虽然是有配置文件,但是也是配置在他jar包里面的,无需我配置啊。再说了我另外一个可以运行的项目也没配置其他的。百思不得其解。

       在已经放弃的边缘,我想说,实在不行换种方式实现吧!

       因为我另外一个项目一样的用法是没有问题的,所以我几乎对比了这个两个项目的所有不同点。能保持一样的都保持一样了。

       其中有个问题,我们的项目都是springboot,在启动类那里,

    //原本没问题的项目
    @ComponentScan("aaa.bbb.ccc")

    //报错的项目
    @ComponentScan

    开始的时候知道这里不同,但是每太注意,因为

    @ComponentScan的作用是扫描其包所在的位置下面的所有包
    @ComponentScan("aaa.bbb.ccc")的作用是扫描指定路径下的所有包

    然后感觉也没问题,就没太注意。
    但是,当你很绝望的时候,什么都要去试一下的。
    然后我把这里也改成了一样。就可以了!!!!

    最后就知道为什么了

    原因就是
    我们公司的默认路径都是
    aaa.bbb.ccc.项目名(ddd).启动类(App.java)

    @ComponentScan没配置扫描路径的时候,就是扫描 aaa.bbb.ccc.项目名(ddd) 下的包
    @ComponentScan("aaa.bbb.ccc")确实扫描的 aa.bbb.ccc 下的包,没有 项目名(ddd)这一层

    而我调用的公用工具包是公司自己写的,都是以公司的名称命名的,所以那些配置文件都是放到 aaa.bbb.ccc 下的
    没有项目名(ddd)。@ComponentScan不指定路径的话,是扫描不到工具jar包里面的类的(扫描不到类,意味着他们的注解是不可以用的),就会导致他们读不到配置文件,
    所以在调用静态方法的时候,就会报 java.lang.NoClassDefFoundError: Could not initialize class xxx

    所以,最终问题确实是归结到 静态代码块读不到 配置文件的内容!!!!




  • 相关阅读:
    Matlab从入门到精通 Chapter5 数据可视化
    给source insight添加.cc的C++文件后缀识别
    机构研究报告
    配置Haproxy
    Ceph:一个 Linux PB 级分布式文件系统
    Centos安装源包出错Package xxx.rpm is not signed
    [虚拟机] 小实验: 使用KVM虚拟机,安装一个windows系统
    关于北京地铁通车计划
    python字符串和数字的基本运算符 valar
    python种类 valar
  • 原文地址:https://www.cnblogs.com/zml-java/p/11480318.html
Copyright © 2011-2022 走看看