最近本人在使用idea搭建聚合项目的时候发生各种奇怪的异常,下面就在此记录一下其中子模块运行时报出的一个异常:
其中异常信息的提示为:
Error creating bean with name 'mvcContentNegotiationManager': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.web.accept.ContentNegotiationManagerFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]
解决方案1:
查看子模块的POM文件是否依赖了父类,当然在很多在使用idea的时候会发现,穿件子模块的时候,子模块的POM文件会自动依赖父类(如下图)
上图的依赖如果经过检查发现没有自动生成,并且你又发生了跟我同样异常,那么加上父工程依赖大概率解决这个异常了.
经过本人在网上查阅相关的帖子和多次重复试验发现:
这个BUG是由于我们之前创建过同名的模块然后被我们移除了,然后我们又重新通过骨架自动生成webapp模块,这样骨架生成的模块会把你的原本自带的POM文件完全覆盖!!!
好巧不巧,你又需要父工程依赖来启动项目,那么你就会出现这个BUG!
最稳妥最靠谱的避免问题再现的方案:每次创建子模块都检查POM文件的依赖,如果没有,手动解决.
当然网上的解决方案也各种各样,但是我都试了发现能临时解决问题,但下次再用骨架生成同名模块时依旧被覆盖...
解决方案2(稍微靠谱):
Setting--Build--Maven--Ignored Files,取消被忽略的POM文件,就会自动添加父工程依赖!
总结:
根本原因还是因为我们之前创建过同名的模块,但是移除的时候没有真正的移除干净.idea中还是有很多删除module的信息,所以新建的时候idea会自动忽略我们写的同名新模块...
当然很大一部分影响是因为我们使用了骨架自动生成!