maven 多模块依赖报 java.lang.NoClassDefFoundError

现象:

web 工程启动报错:

 Caused by: java.lang.NoClassDefFoundError: com/fafree/entity/SysUser

报错原因分析:

对应模块的 jar 包没有被打包到 web 工程的 lib 目录下

验证方式:

直接把当前项目加载到 tomcat 下面启动,然后在 tomcat 中选择当前项目点击鼠标右键->Browse Deployment Location
打开项目下的 WEB-INF/lib 目录,查看当前目录下的 jar 包文件,有没有报错类所在的 jar 包,正常情况下是不会有的。

解决办法:

仔细查看一下无法被加载进来的 jar 包所在模块,里面是不是有 test 模块,把 项目下的/src/test/java目录以及 /src/main/test目录从项目的 Java Build Path的 Source 选下卡下移除,然后把项目整体的 Clean 一下,重新打包运行。

导致问题的原因:
经过参考一些Maven的资料得知,其工作机制实际上是包的依赖管理。在规定的标准目录下,能够在模块之间引用的代码只能存在于main目录下。而单元测试(test目录下的代码)模型是建立在“独立”的思想之上的,目的就是不受其他环境的干扰从而纯粹地验证自身模块的可用性和正确性。因此单元测试代码之间是不能被其他模块引用的。
将其他模块的单元测试代码解除src/test/java级引用后,项目成功build。

虽然其他模块引用的并不是别的模块下的 test 目录下的类,但是这种方式可能会导致同样的问题出现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值