阅读 245

Maven Helper插件解决依赖冲突

声明:本篇博客只对 Maven Helper 的使用方法进行深入探究,安装及使用博客推荐:idea 中解决maven 包冲突的问题(maven helper)

抛出问题:NoClassDefFoundError

当我在业务中调用公司的 ID 生成器组件时,使用 Maven Helper 插件发现这个组件 jar 包存在两种不同版本的引用: 依赖冲突

依着一般保留最新版本的原则,我在 1.1.1 版本上Exclude了一下解决了冲突。

结果启动 Tomcat 服务器对组件进行调用时,发生了NoClassDefFoundError异常!

案发现场:一个多模块的 JavaWeb 应用

多模块的Javaweb项目

JavaWeb 多模块应用:父 pom 文件做版本控制,Web 模块引用 Biz 模块,Biz模块引用 Service 模块,Service 模块引用 dao 模块,这样层级引用。

解决冲突:jar 包没有被引入

首先,我们找到 web 模块下项目发布输出的target文件夹,在lib中发现jar包确实没有被引入! jar包没有引入

然后想了一下,是不是解决依赖时出现了问题,于是发现在biz.pom文件中仍然存在 ID 生成器组件的不同版本的 jar 包依赖:

仍然存在jar包冲突

于是我开始怀疑人生:

当我Exclude时,Maven Helper插件究竟为我做了什么?

在我一顿测试之后发现了问题:

  1. jar 包冲突实际发生在 biz 层,web 层也出现冲突,是因为 web 层引用了 biz 层;
  2. 我实际在 web 层的 1.1.1 版本上 Exclude 了一下,结果 Maven Helper 在 web.pom 文件中去除了这个依赖: 错误的解决依赖

Maven Helper 的使用总结

  1. 遇到NotClassFound异常,先到target/web模块名/WEB-INF/lib文件夹中看 jar 包是否被真正的引入;
  2. 解决冲突要在引入的最底层去Exclude解决,比如我这次,需要在 biz 层Exclude低版本的 ID 生成组件版本!
文章分类
后端
文章标签