ES常见错误之依赖引入覆盖
一、导入依赖,但是无法使用相应API实际开发过程中,项目本身已经导入了非常多的依赖,当我们导入新的依赖时,容易发生依赖冲突及依赖覆盖。首先要知道Maven依赖pom文件中有三个原则:一、路径不同,依赖路径最短优先原则。二、路径相同,从上向下,就近原则。三、子pom优先父pom。二、解决思路首先检查依赖是否成功导入,重新导入依赖后,经检查,已经导入项目中,依然没有相应API。之后怀疑是不是自己记错
一、导入依赖,但是无法使用相应API
实际开发过程中,项目本身已经导入了非常多的依赖,当我们导入新的依赖时,容易发生依赖冲突及依赖覆盖。
首先要知道Maven依赖pom文件中有三个原则:
一、路径不同,依赖路径最短优先原则。
二、路径相同,从上向下,就近原则。
三、子pom优先父pom。
二、解决思路
首先检查依赖是否成功导入,重新导入依赖后,经检查,已经导入项目中,依然没有相应API。
之后怀疑是不是自己记错了,该API并不存在,新建一个项目demo,进行同样操作,可以使用该API。那么问题就锁定在了项目的POM文件。
1.添加依赖
2.删除依赖
3.观察项目引入的jar包
不断重复这三个步骤,最终发现lucene版本不一致。即之所以该API使用不了,是因为被覆盖掉了。低版本并不具备我所要用的方法。
随之使用依赖树,找到覆盖的依赖,使用exclusion关键字,将部分jar包排除,解决这个问题。下边两张图片对比,标红的为4.5.1。
错误的图片:
正确的图片:
解决方法:
三、优化
由于这种问题非常麻烦,不容易发现,一个大型项目中,引入的依赖是非常多的,所以我又对pom文件进行了一个梳理,使用maven helper插件,将所有的依赖冲突解决。
maven helper插件对jar包的追踪溯源非常强大。
附maven自带的依赖树和maven helper插件的依赖列表,对比如图:
哪个好用,一目了然。
四、总结
只要是API的问题,就去找pom文件,查jar包,另外pom依赖最好分类放置,干净整洁。
更多推荐
所有评论(0)