这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战
问题描述
今天,在编写一个rest客户端的代码的时候,需要导入一个http依赖的时候,如下:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcomponents-client</artifactId>
<version>4.5.13</version>
// 以下这个类型这段代码在我引入的时候被我删除了
<type>pom</type>
</dependency>
很奇怪的问题发生了,这个引用依赖竟然无法解析,报错信息如下:
Cannot resolve org.apache.httpcomponents:httpcomponents-client:4.5.13
Clean up the broken artifacts data and reload the project.
但是在此之前,我的Maven的配置以及仓库都运行的很好啊,没有任何的问题。为什么现在就发生问题呢,让我非常的不理解。
排查过程
引入另一个依赖
因为这个依赖无法引入,这个还不能就断定我的Maven配置的问题,于是我找到了一个新的一个依赖,Elasticsearch的:
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>8.0.0</version>
</dependency>
这时候Elasticsearch的依赖可以正常的解析并且导入。这个就可以判断出我的Maven的配置是没有问题的,可以正常的引入和下载jar包。
本地导入
既然Maven无法解析到对应的依赖,那么我可以去寻找jar包,从本地去导入的,于是我去网上的在线远程仓库里寻找httpcomponents-client
的依赖的jar包,发现了一个很奇怪的问题,这个依赖竟然没有jar包可以下载,只有pom这个选项,其他的是有jar包的选项的,我还特定找了它以前的版本,也没有找到jar包的选项。
无jar包选项
有jar包选项的依赖:
最终解决办法
因为类型定义为pom的依赖,是一个依赖的合集,并不是一个真正的依赖,我们需要把这种依赖定义在<dependencyManagement>
中,然后在正常依赖中引用里面定义的依赖,不用添加版本号就可以了,如下图
总结
这次依赖解析的问题花费了很多时间在排查无关的问题上,比如IDEA的缓存,重建索引。核心的问题定位不准,导致浪费了一些时间。