Caused by: java.lang.VerifyError: Cannot inherit from final class
at org.apache.http.impl.client.DefaultHttpClient.createHttpParams(DefaultHttpClient.java:161)
at com.jp2p.yibao.util.httpclient.HttpClient4Util.(HttpClient4Util.java:88)
<dependencyManagement>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.14</version>
</dependency>
</dependencyManagement>
<dependency>
<groupId>com.thirdparty</groupId>
<artifactId>some-lib</artifactId>
<exclusions>
<exclusion><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId></exclusion>
</exclusions>
</dependency>
// ❌ 舊寫法 (4.2 風格)
HttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, timeout);
// ✅ 4.5+ 推薦:RequestConfig + Builder 模式
RequestConfig config = RequestConfig.custom()
.setConnectTimeout(5000)
.setSocketTimeout(timeout)
.setConnectionRequestTimeout(5000)
.build();
HttpClient client = HttpClientBuilder.create()
.setDefaultRequestConfig(config)
.build();
| 操作 | 風險 | 規範 |
|---|---|---|
| 手動複製 Jar 到 WEB-INF/lib | 極高 (繞過依賴管理) | **禁用**,全靠 Maven/Gradle |
| 專案同時依賴 httpclient 4.2 和 4.5 | VerifyError / NoSuchMethodError | **強制統一版本** |
| 升級 Spring Boot 但未同步 httpclient | 傳遞依賴衝突 | 查看 `dependency:tree` 確認 |
**`VerifyError: Cannot inherit from final class` 99% 由 HttpClient 多版本共存引起**。統一依賴版本至 4.5.13、遷移至 `RequestConfig` API、啟用 `dependencyManagement` 強制版本,徹底根治。
