Exception in thread "main" java.lang
.NoSuchMethodError: okhttp3.HttpUrl.get(Ljava/lang/String;)Lokhttp3/HttpUrl;
at r
etrofit2.Retrofit$Builder.baseUrl(Retrofit.java:458)
at pe.freeopen.eosclient.client.http.Generator.createService(Generator.java:45)
at pe.freeopen.eosclient.EosClient.<init>(EosClient.java:42)
百度了两个案例。
retrofit 依赖okhttp3报错_要争气的博客-CSDN博客
https://blog.csdn.net/liangwenmail/article/details/118327411retrofit是一款好用的http框架,在项目集成retrofit时,有时候会启动报关于okhttp错,如下:
the follollowing method did not exists:
okhttp3.HttpUrl.get(Ljava/lang/String;)Lokhttp3/HttpUrl;
解决思路:
排除retrofit 的okhttp3依赖,强依赖okhttp33.12.0版本
NoSuchMethodError: okhttp3.HttpUrl.get(Ljava/lang/String;)Lokhttp3/HttpUrl; 问题原因及解决_Algowi 京保的博客-CSDN博客
https://blog.csdn.net/weixin_41020185/article/details/105959138
1.问题原由
由于项目中用到com.squareup.retrofit2 retrofit2.jar2.5.0retrofit2(2.5.0)用的是okhttp3(3.12.0)版,其中有有一段是这样引用的/*** Set the API base URL.
*
*@see#baseUrl(HttpUrl)*/
publicBuilder baseUrl(String baseUrl) {
Objects.requireNonNull(baseUrl,"baseUrl == null");returnbaseUrl(HttpUrl.get(baseUrl));
}
HttpUrl.get(baseUrl) 就是这段报的错
项目中okhttp3 包版本冲突,引用的是okhttp3(3.8.1)版,而(3.8.1)版没有HttpUrl.get(String url)方法 ,而是换成了HttpUrl.get(URL url)方法,因此报错,解决jar包冲突引用okhttp3(3.12.0)版本就好了。
本人解决方法:
===拓展 如何查看pom的依赖关系, 打开pom 右键 查看 diagrams 能看到报错的依赖,一目了然。

因为本人项目中的 retrofit是2.5版本,里面依赖 okhttp 3.12.0版本。而本人想买中用的 okhttp 却是 3.10.0 ,所以有问题。
解决方法,要么把okhttp 改大成,3.12.0 要么把retrofit 由2.5版本改成2.4版本。
本人直接将2.5改成 2.4的版本就可以了。
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.10.0</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>converter-jackson</artifactId>
<version>2.5.0</version>
</dependency>
程序可以跑起来了,但是还有问题,
把retrofit 由2.5版本改成2.4版本。请求一些api返回不了数据。
把okhttp 改大成,3.12.0 ,某个api能返回数据。

两种修改方式,看pom依赖都还有红线,... 应该是没有问题的,我看了其他正常的项目也是有红线。比如

目前 把okhttp 改大成,3.12.0 是可以正常跑了。