maven明明打包成功,依赖jar也在lib中,却一直给你报ClassNotFoundException

现象

问题起因:是我更换mavensetting.xml的私服的配置导致的。(其实不算是,主要是我更换setting.xml配置后,手贱回滚pom.xml了,导致之前的解决的jar冲突又回来了)

现象:项目代码大量飘红;加载索引失败(scanning files to index),项目无法启动;项目能启动了,却报了ClassNotFoundException的错误。。。

排查过程

第一

build的时候,会有以下警告和错误

[WARNING] The POM for common-core:0.0.1-SNAPSHOT is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[ERROR] ‘dependencies.dependency.version’ for com.google.guava:guava:jar is missing

不过我睁眼瞎,啥都没看到。或者是,太寻常了,连看到没看一眼。。。。就这样和成功擦肩而过。。。

第二 红海问题

逼不得已,先解决红海的问题。关于红海的问题,所以基本可以断定,是包索引的问题。索引没加载成功,导致项目无法加载到这写依赖包。

经过多次的reimport(重新加载依赖信息)clean(清空编译文件)install(重新编译文件)Generate Source and Update Folder for All project(重新加载项目结构)invalidate and restart(清除缓存)发现问题还是没有解决红海的问题。
最后,我直接删除了项目,清除了缓存,并且把项目下的.idea.impl文件都删除了。最后才install成功的。

关于这个警告,他是说,当前的maven3不推荐${planning.version}这种写法
即:不允许version为非常量值,这种写法会导致项目不稳定。因为未来maven可能会取消这种写法。

大家可以根据要求修改,也可以当他放屁,等真正不支持的时候,再改。
警告

第三 打包问题

红海问题解决了,打包的时候失败了。经过排查发现,一个名为common-core项目模块依赖包,出问题了。
这个依赖包,项目到是成功引入了,但是这个包下面的依赖包却没有引入,比如:common-core引入了的fastjson,但是项目中却没有fastjson的包。。。
解决方案:直接通过Project Structure将缺失的模块导入到项目中。这样依赖的依赖就有了。

第四 启动问题

打包成功,本地启动没有问题,但是上了服务器,却给你报ClassNotFoundException的问题。
最后多次翻找博客,找打了查看日志的方法:
transitive dependencies (if any) will not be available

根据博客执行命令:

#配置maven环境变量后
mvn clean compile -U -X >> a.log

最后在日志 a.log中找到了,第一那两行的提示信息,才发现原来是 guava的包出现的问题。
最最主要的是,在之前build的日志中idea给我了提示了。。。我都没发现。。。

原因:guava包冲突了,导致了项目引用的common-core包的传递性被破坏,导致项目无法加载到common-core下的依赖。也就出现了各种问题。。。。

你可能感兴趣的:(exception,java,java,maven,guava)