maven问题ClassNotFoundException或NoClassDefFoundError解决

最近在做项目时老是遇到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包“短路优先”、“先声明优先”解决。

扫描二维码关注公众号,回复: 4264405 查看本文章

 1.3 maven依赖得jar为scope=provided

 依赖由容器提供,即需要maven工程其他jar间接引入或者单独引入

 maven scope可以阅读相关资料深入了解。

2. NoClassDefFoundError

2.1 类中静态代码块运行抛出未捕获异常。

  静态代码块捕获异常。

2. 静态方法无法有依赖问题。例如静态方法参数类找不到,或者参数类冲突。

  debug定位到具体静态方法。解决依赖冲突问题。

注:上面截图中HttpServletRequest在项目运行中没有发生冲突,是因为javaee-api-8.0.jar 是 compile, tomcat-embed-core-8.5.31jar 是runtime(运行时动态加载并实例化)。

   

猜你喜欢

转载自www.cnblogs.com/nullAndValue/p/10029572.html