最近在做项目时老是遇到ClassNotFoundException、NoClassDefFoundError。对这些问题进行初步总结。
1.ClassNotFoundException
1.1 检查jar相应jar包是否已经引入
例如,idea 使用ctrl+n查看工程中是否有该类,进入该类查看jar包是否被引入进相应工程。
1.2. jar包冲突
a. 先得知该类所在jar包。例如,idea 使用ctrl+n查看工程中那些jar包有该类存在。
b.然后使用maven命令mvn dependency:tree 查看项目依赖树。
c.根据工程决定jar包取舍。
例如a.jar 依赖 s 版本为1, b.jar含有s版本为2。现在要决定使用b.jar。使用exclusions去除a.jar得依赖下冲突解决。
还可以通过jar包“短路优先”、“先声明优先”解决。
1.3 maven依赖得jar为scope=provided
依赖由容器提供,即需要maven工程其他jar间接引入或者单独引入。
2. NoClassDefFoundError
2.1 类中静态代码块运行抛出未捕获异常。
静态代码块捕获异常。
2. 静态方法无法有依赖问题。例如静态方法参数类找不到,或者参数类冲突。
debug定位到具体静态方法。解决依赖冲突问题。