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 s版本2。使用exclusions去除a.jar s版本2依赖冲突解决。

  还可以通过jar包“短路优先”、“先声明优先”解决。

 1.3 maven依赖得jar为scope=provided

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

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

2. NoClassDefFoundError

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

  静态代码块捕获异常。

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

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

 

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

 

 

   

 

posted on 2018-11-27 22:38  NullToValue 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/nullAndValue/p/10029572.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: java.lang.ClassNotFoundException是一个常见的错误,通常有几个可能的原因。首先,可能是项目中没有引入该类所属的jar包的坐标。你可以查看项目的pom文件,确认是否引入了该jar包的坐标,或者检查项目的Maven dependencies下是否有该class的jar包。\[1\]其次,可能是项目中多个maven坐标引入的jar包所依赖有所重叠,导致版本不一致产生冲突。你可以检查刚刚加入的maven坐标所依赖的jar包,与项目中其他maven坐标引入的jar包所依赖的jar包是否相同。\[1\]简单的解决办法是,将刚刚引入的jar包注释掉,然后复制Maven dependencies下所有的jar包名称到记事本文件中,再将刚刚引入的jar包解注释,再次复制所有的jar包名称到记事本文件中,最后使用代码比对工具比对两者所引入的jar包的区别,以查看是否有jar包依赖的冲突。\[1\]另外,有时候该错误可能是因为在部署路径下的lib文件夹中缺少相应的jar包。你可以进入到tomcat的部署路径下的lib文件夹,检查是否缺少相应的jar包。\[2\]最后,需要注意的是,该错误通常是在程序运行时找不到类,而不是在编译时找不到类。因此,即使在IDEA编译时没有报错,但在运行时仍然可能找不到对应的类。\[3\]希望这些解释能帮助你解决java.lang.ClassNotFoundException问题。 #### 引用[.reference_title] - *1* [maven工程下 java.lang.ClassNotFoundException原因浅析](https://blog.csdn.net/farYang/article/details/53168233)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Maven项目下java.lang.ClassNotFoundException解决方法](https://blog.csdn.net/zym2895756/article/details/78233688)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [maven依赖传统导致的 java.lang.NoClassDefFoundErrorClassNotFoundException产生原因以及解决方法](https://blog.csdn.net/qq_45171957/article/details/126899231)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值