1

我编写了一个 API Man 插件,它com.squareup.okhttp3:okhttp:3.11.0用作依赖项,它对com.squareup.okio:okio:jar:1.14.0. 然而,Wildfly (10.1.0.Final) 似乎使用了不同的版本com.squareup.okio:okio:jar:1.4.0,因此我得到了以下异常。

java.lang.NoSuchMethodError: okio.BufferedSource.readUtf8LineStrict(J)Ljava/lang/String;
   at okhttp3.internal.http1.Http1Codec.readHeaderLine(Http1Codec.java:215)
   at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:189)
   at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:88)
   at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)

为了解决这个问题,我在我的项目 src/main/webapp/WEB-INF 目录中包含了以下 jboss-deployment-structure.xml

<jboss-deployment-structure>
  <deployment>
    <!-- Exclusions allow you to prevent the server from automatically adding
      some dependencies -->
    <exclusions>
      <module name="okio" />
    </exclusions>
  </deployment>
</jboss-deployment-structure>

然而它似乎并没有解决它

4

1 回答 1

2

为了避免过度依赖负载,您需要添加一个排除项。您添加的排除不正确

<exclusions>
  <module name="com.squareup.okhttp3" /> ///Correct exclusion
</exclusions>

此外,如果您在代码中使用与上述依赖项相关的类,则在可部署的类路径/lib 文件夹中提供这些 jar 文件。在您的 lib 文件夹中添加以下两个 jar。

  1. okhttp-3.xxjar
  2. okio-1.xxjar
于 2019-05-09T10:29:46.583 回答