IDEA查看Jar包是由哪个依赖引入的、查找maven依赖关系,找到某个maven依赖所在的pom

简介: 本文揭秘了Spring Boot项目中`org.apache.http.client`类(如`RequestConfig`)虽未显式引入`httpclient`依赖却能正常使用的原因——实为`spring-boot-starter-data-elasticsearch`等starter通过多层传递依赖间接引入。借助IDEA的Maven Helper插件或Maven视图的依赖分析功能,可快速定位嵌套来源,高效解决“类存在但依赖缺失”的困惑。(239字)

1 背景

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

image-20260603164511165

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

image-20260603164802894

可以轻易知道它是来源于 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 这个依赖,那这个源头依赖是哪个?怎么才能快速找到它呢?

2 idea查找maven依赖关系

2.1 使用Maven Helper 插件

下图是我的 pom.xml 文件

image-20260603165629362

Dependency Analyzer

image-20260603165720099

点进去之后如下图所示:

image-20260603165920646

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

image-20260603170426895

上图中可以看到,spring-boot-starter-data-elasticsearch 这个依赖中又嵌套引入了 3 个依赖

image-20260603170636303

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

image-20260603170813182

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

image-20260603171215044

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 这个依赖

2.2 maven 直接搜

idea 右侧 → maven → 搜索框

image-20260603172104920

点击之后如下图所示:

image-20260603172313608

  • kxy-common :工程名字,可以选,毕竟每个工程下依赖都会不同
  • Resolved Dependencies:表示已解析到的依赖,也就是 kxy-common 这个工程下解析得到的所有依赖,包括嵌套的依赖
  • 选中第一个依赖,右边展示的是它的树结果,最顶层是 kxy-common ,表示它是 kxy-common 这个工程下的,是由 spring-boot-starter-test 这个依赖嵌套引入的

image-20260603173254166

回到正题,搜一下 httpclient ,实际上搜 httpcli 就能搜到,右边可以看到,它是由 spring-boot-starter-data-elasticsearch 嵌套引入的。而且还不是直接嵌套,而是多层嵌套

image-20260603173556173

maven 中的 Dependencies 中可以看到,确实是打开多层嵌套,才能找到 httpclient 这个依赖

相关文章
|
数据安全/隐私保护
xshell 安装包(百度网盘)+安装过程&连接虚拟机注意事项
xshell 安装包(百度网盘)+安装过程&连接虚拟机注意事项
xshell 安装包(百度网盘)+安装过程&连接虚拟机注意事项
|
Java Shell API
Nacos报错问题之启动报错找不到服务如何解决
Nacos是一个开源的、易于部署的动态服务发现、配置管理和服务管理平台,旨在帮助微服务架构下的应用进行快速配置更新和服务治理;在实际运用中,用户可能会遇到各种报错,本合集将常见的Nacos报错问题进行归纳和解答,以便使用者能够快速定位和解决这些问题。
3632 110
|
JavaScript 前端开发 网络安全
Video.js实现在html页面播放rtmp流媒体
Video.js实现在html页面播放rtmp流媒体
2332 0
|
2月前
|
关系型数据库 数据库 开发工具
Navicat Premium 17 数据库管理安装教程:DLL 补丁(64位)
Navicat Premium 17 是功能强大的跨数据库管理与开发工具,提供直观图形界面,支持MySQL、Oracle、SQL Server等。本指南详解含Crack补丁的Windows 64位安装全流程,助您快速部署使用。(239字)
1328 0
|
5月前
|
Kubernetes 安全 开发工具
OpenCode 企业级 Docker 部署完整指南
OpenCode 是开源AI编程助手,支持多LLM(Claude/OpenAI/本地模型),提供终端/IDE/桌面多端协同开发。采用客户端架构,无服务端监听,强调安全合规:Docker部署默认非root、最小挂载、资源可控、网络隔离,适配企业级开发与审计要求。
3556 5
|
Java Serverless 数据库连接
nacosjar包运行问题之报错何解决?
Nacos是一个开源的、易于部署的动态服务发现、配置管理和服务管理平台,旨在帮助微服务架构下的应用进行快速配置更新和服务治理;在实际运用中,用户可能会遇到各种报错,本合集将常见的Nacos报错问题进行归纳和解答,以便使用者能够快速定位和解决这些问题。
729 93
|
IDE Java 开发工具
Java---ideaIU-2023.1专业版使用以及安装方法
Java---ideaIU-2023.1专业版使用以及安装方法
|
存储 分布式计算 大数据
Flume+Hadoop:打造你的大数据处理流水线
本文介绍了如何使用Apache Flume采集日志数据并上传至Hadoop分布式文件系统(HDFS)。Flume是一个高可用、可靠的分布式系统,适用于大规模日志数据的采集和传输。文章详细描述了Flume的安装、配置及启动过程,并通过具体示例展示了如何将本地日志数据实时传输到HDFS中。同时,还提供了验证步骤,确保数据成功上传。最后,补充说明了使用文件模式作为channel以避免数据丢失的方法。
962 4
|
SQL JSON 数据处理
大数据Hive JSON数据处理
大数据Hive JSON数据处理
1397 0
|
缓存 Ubuntu Linux
在Linux中,Yum、Dnf、Apt-get和Pacman有何区别?
在Linux中,Yum、Dnf、Apt-get和Pacman有何区别?