java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.platformThreadFactory() while running fabric-sdk-java in Weblogic 12c

java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.platformThreadFactory() while running fabric-sdk-java in Weblogic 12c

我正在使用 fabric-sdk-java client 与我的 Hyperledger Fabric V1.0 网络 本地设置进行交互。当 运行 客户端作为独立 java 应用程序时,一切正常。但是,当我在部署在 application.ear 服务器中的 application.ear 中使用相同内容时,出现以下异常

Caused by: java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.platformThreadFactory()Ljava/util/concurrent/ThreadFactory;
    at io.grpc.internal.GrpcUtil.getThreadFactory(GrpcUtil.java:482)
    at io.grpc.internal.GrpcUtil.create(GrpcUtil.java:421)
    at io.grpc.internal.GrpcUtil.create(GrpcUtil.java:417)
    at io.grpc.internal.SharedResourceHolder.getInternal(SharedResourceHolder.java:104)
    at io.grpc.internal.SharedResourceHolder.get(SharedResourceHolder.java:74)
    at io.grpc.internal.SharedResourcePool.getObject(SharedResourcePool.java:35)
    at io.grpc.internal.ManagedChannelImpl.<init>(ManagedChannelImpl.java:383)
    at io.grpc.internal.AbstractManagedChannelImplBuilder.build(AbstractManagedChannelImplBuilder.java:331)
    at org.hyperledger.fabric.sdk.OrdererClient.sendDeliver(OrdererClient.java:220)
    at org.hyperledger.fabric.sdk.Orderer.sendDeliver(Orderer.java:172)
    at org.hyperledger.fabric.sdk.Channel.seekBlock(Channel.java:1198)
    at org.hyperledger.fabric.sdk.Channel.getLatestBlock(Channel.java:1274)
    at org.hyperledger.fabric.sdk.Channel.getLastConfigIndex(Channel.java:1097)
    at org.hyperledger.fabric.sdk.Channel.getConfigurationBlock(Channel.java:1028)
    at org.hyperledger.fabric.sdk.Channel.parseConfigBlock(Channel.java:949)
    at org.hyperledger.fabric.sdk.Channel.initialize(Channel.java:676)
    ......

由于所有这些依赖项都在 fabric-sdk-java I am not sure where to do its fix. I had seen some post telling it is the issue with guava version. fabric-sdk-java 内,因此与 guava 版本 19.

存在依赖关系

我不明白为什么它在 运行 作为独立 java 应用程序时工作,但在 Weblogic 12c 服务器中部署后会出现此问题。

我是否需要添加更多内容才能在 Weblogic 12c 服务器中工作?

99% 的此类异常是由版本不匹配引起的。比如这个方法在之前的版本中是没有的,是在之后的版本中加入的,而你使用的是之前的版本。所以 class 在那里(它不是 ClassNotFoundException),但它没有调用代码期望的具有此特定签名的方法。

您应该仔细检查您的 class路径。找到包含 com.google.common.util.concurrent.MoreExecutors class 的 jar。检查你没有两个错误。并尝试找到已知可以协同工作的官方 jar 组合。

当然,欢迎来到class路径地狱!