一、问题
项目引入一个第三方jar包,第三方jar包引入了
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>5.2.1</version>
</dependency>
然后在运行的时候报错Handler dispatch failed;nested exception is java.lang.NoClassDefFoundError: org/apache/hc/client5/http/config/ConnectionConfig,我在网上搜这个错都是说运行时找不到这个类,但是第三方jar包明明引入了,我又在项目中尝试引入httpclient5,还是报错。然后我就点进第三方jar包使用httpclient5具体类的地方,发现ConnectionConfig用Ctrl+鼠标左键点不进去,同一个包下其他的类能点进去,我就看看其他的类在哪个包下,结果发现在5.1.4版本的包下,而5.1.4版本的包没有ConnectionConfig这个类。
我尝试把5.1.4和5.2.1的包都删掉还是不行,只导入5.2.1他会把5.1.4的包也导进来,这样运行时还是调用5.1.4包里的类。试过各种方法,锁定版本号,排除依赖都不行,因为这个5.1.4版本可能不知道哪里来的传递依赖。
二、解决
最终解决:使用 Dependency Management:在项目的顶层 POM 文件中使用 <dependencyManagement>
部分来统一管理依赖版本。这样最终引入的就是5.2.1版本的。
<properties>
<httpclient5.version>5.2.1</httpclient5.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>${httpclient5.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
本人只是一个菜鸟,希望为遇到同样问题的人提供下解决方案。