您的位置:首页 > 编程语言 > Java开发

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

2017-05-09 09:55 2051 查看

现象:

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 目录下的类,但是这种方式可能会导致同样的问题出现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  maven
相关文章推荐