感慨:啊啊啊啊啊啊啊啊啊啊,这个问题弄了我很久,整整一天!!!java
概述:本来是调用公司本身写的jar包的工具类。在其余项目都能调用,如出一辙的套用过来就是不行。问了一些同事他们也不知道怎么解决。spring
而后百度上网查资料,网上大多数都是说jar包冲突,或者读不到配置文件,静态方法什么的。由于这是公司内部写的工具jar包,应该不会存在冲突的。我仍是springboot
检查了jar包,由于我另一个项目调这个方法是没问题的。因此我把j整个项目的jar包几乎改为和另一个项目同样的。仍是没用(中途包括网上查的先降级在升级jar什么的,都试过)。工具
项目重启,各类clean install 从新编译仍是没用。真的是奇了怪了。spa
网上说读不到配置文件。我看了我那个工具类,他虽然是有配置文件,可是也是配置在他jar包里面的,无需我配置啊。再说了我另一个能够运行的项目也没配置其余的。百思不得其解。code
在已经放弃的边缘,我想说,实在不行换种方式实现吧!blog
由于我另一个项目同样的用法是没有问题的,因此我几乎对比了这个两个项目的全部不一样点。能保持同样的都保持同样了。it
其中有个问题,咱们的项目都是springboot,在启动类那里,编译
//本来没问题的项目
@ComponentScan("aaa.bbb.ccc")
//报错的项目
@ComponentScan
开始的时候知道这里不一样,可是每太注意,由于class
@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因此,最终问题确实是归结到 静态代码块读不到 配置文件的内容!!!!