
今天想写一个 HttpUtils 工具类,为了偷懒,就把其他项目的 HttpUtils 给抄过来了,但是抄过来之后就发现,代码大片飘红,缺少依赖。所以我就好奇,HttpUtils 中的类都是来源于哪个依赖。而且我在旧项目中的 pom.xml 中搜了,找不到任何 http 相关的依赖

比如上图我选中的这些类,都是在 org.apache.http.client 包下,点进 RequestConfig 类

可以轻易知道它是来源于 httpclient-4.5.14.jar ,这个 jar包对应的依赖明显是
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.14</version>
</dependency>可问题是,我旧项目中明明没有引入这个依赖,为什么能使用 org.apache.http.client.config.RequestConfig 类呢?
我知道,肯定是 pom.xml 文件中引入了某个依赖,然后这个依赖又嵌套引入了 httpclient 这个依赖,那这个源头依赖是哪个?怎么才能快速找到它呢?
下图是我的 pom.xml 文件

Dependency Analyzer

点进去之后如下图所示:

All Dependencies as Tree :把所有依赖排列成树结构。上图展示的就是 pom.xml 文件中引入的所有依赖,注意:pom.xml 中引入了 10 个依赖,那么上图就会展示 10 个依赖,至于依赖中嵌套的依赖,需要展开树才能展示All Dependencies as Tree :把所有依赖以列表形式展示,也就是说,pom.xml 中引入的依赖和嵌套的依赖,都会集中展示
上图中可以看到,spring-boot-starter-data-elasticsearch 这个依赖中又嵌套引入了 3 个依赖

回到问题本身,我就想知道我的 HttpUtils 工具类中的 org.apache.http.client 中的类,是来源于我 pom.xml 文件的哪个依赖

就拿 RequestConfig 类来说,我已经知道它是来源于 httpclient-4.5.14.jar 这个 jar 包,那这个 jar 包又是从 pom.xml 中的哪个依赖引进来的?

在 Dependency Analyzer 中直接搜索 httpclient ,如上图所示
elasticsearch-rest-client 这个依赖,elasticsearch-rest-client 又是来源于 spring-data-elasticsearch 这个依赖,spring-data-elasticsearch 又是来源于 spring-boot-starter-data-elasticsearch 这个依赖,而它就是我们在 pom.xml 中引入的依赖。所以: org.apache.http.client 中的类是来源于 pom.xml 文件中的 spring-boot-starter-data-elasticsearch 这个依赖
idea 右侧 → maven → 搜索框

点击之后如下图所示:

kxy-common :工程名字,可以选,毕竟每个工程下依赖都会不同Resolved Dependencies:表示已解析到的依赖,也就是 kxy-common 这个工程下解析得到的所有依赖,包括嵌套的依赖kxy-common ,表示它是 kxy-common 这个工程下的,是由 spring-boot-starter-test 这个依赖嵌套引入的
回到正题,搜一下 httpclient ,实际上搜 httpcli 就能搜到,右边可以看到,它是由 spring-boot-starter-data-elasticsearch 嵌套引入的。而且还不是直接嵌套,而是多层嵌套

在 maven 中的 Dependencies 中可以看到,确实是打开多层嵌套,才能找到 httpclient 这个依赖
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。