DependentJar没有下发,导致找不到class文件导致无法启动。Causedby:java.lang.NoClassDefFoundError:xxx是这个人。但是我在本地启动服务是正常的。我经历过惊喜->怀疑->烦躁->烦躁->心痛->喜悦。短短半天的时间,感觉自己过了一个过山车+大摆锤,完了,头都晕了。关键是本地是正常的!下面,就请大家跟随小编的视角,一起来看看这个让人差点爆炸的异常吧!1遇到问题。一顿饭吃完,代码写好了,Junit测试完成,接口文件上传到YApi完成。坚决释放dev环境!直接进入启动重试!(PS:通过发布平台发布)这时候第一反应:试试本地启动吧!锤了,跟开机姿势没关系!从平静到暴躁,当然要看启动日志了。PS:服务没有起来,只能ssh到服务器上查看日志。Causedby:java.lang.ClassNotFoundException:xxxCausedby:java.lang.NoClassDefFoundError:xxx就是这两个哥们,类找不到,奇怪。这个类是通过三方jar包的依赖进来的。我可以输入源代码吗?+B在IDEA中!不禁怀疑是不是开发环境使用的Docker容器的问题。可以发布其他分支。是不是因为我引入了另一个小伙伴提供的jar,所以现在不能用了!又是依赖关系的调整!还是不行!会不会是我引入的导入版本不对?从其他项目中了解如何使用它!还是行不通!难道他的jar包还依赖了很多其他的东西?尝试排除其他依赖项!还是不行!是我的本地jar缓存吗?尝试删除本地磁盘上的jar?dev用的是容器,我们拉不下jar包。不过我可以在本地打个包试试!clean包得到一个jar包jar-xvfxxx-web-1.0.0-SNAPSHOT.jar到BOOT-INF/lib%>ls|grepuser里面居然什么都没有!既然打包了没有进入,那就看看mvn依赖树的问题吧!解决问题项目结构web启动失败是因为service添加的依赖没有传递给web,所以web包没有进入那个类。注意这里可以正常打包,本地环境也可以正常启动。奇怪的!现在进入解决方案:查看maven依赖树,进入web模块,执行如下命令。mvndependency:tree>tree.txt有这样一行错误:[WARNING]ThePOMforcom.xxx:xxx-xxx-xxx:jar:1.0.1-SNAPSHOTisinvalid,transitivedependencies(ifany)willnotbeavailable,enableddebugloggingformoredetails问题描述的很清楚,依赖转移失败。因为依赖转移失败?然后打开调试打印错误:mvn-Xdependency:tree>tree.txt[WARNING]ThePOMforcom.xxx:xxx-xxx-xxx:jar:1.0.1-SNAPSHOTisinvalid,transitivedependencies(ifany)willnotbeavailable:2problemswereencounteredwhile为com.xxx:xxx-xxx-xxx:jar:1.0.1-SNAPSHOT[ERROR]'dependencies.dependency.version'forcom.alibaba:easyexcel:jarismissing.@[ERROR]'dependencies.dependency.version构建有效模型'forcom.xxx:cache:jarismissing.@说的是因为找不到下面两个jar的版本,所以会导致依赖传递失败。PS:我所有的依赖版本都维护在父POM中,子模块只依赖groupId和artifactId。所以归根结底还是因为父POM的版本没有传下去!仔细一看,发现父POM的版本是1.0.0,各个模块的父节点的属性也是1.0.0。之前一直是SNAPSHOT版本,但是因为公司的nexus配置了自动清除长期不用的SNAPSHOT版本的依赖,所以我把SNAPSHOT去掉了。部署到私服的父POM是一个空项目,里面只有一个POM文件。最后升级父POM的版本,重新部署,再更改各个模块的依赖版本。你完成了!2小结本文主要是含泪写下一个辛苦的排错过程。害,我第一时间没想到原因!下次再见面记得mvn-Xdependency:tree>tree.txt看依赖树!我的实践证明,重启、清缓存、去除依赖都没有用!本文转载自微信公众号“程序员小航”,可通过以下二维码关注。转载本文请联系程序员小航公众号。
