一、导入依赖,但是无法使用相应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依赖最好分类放置,干净整洁。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐