Java Corda项目中的NoSuchMethodError异常

Java Corda项目中的NoSuchMethodError异常,java,blockchain,corda,Java,Blockchain,Corda,在Corda项目中,我们使用FlowExternalAsyncOperation与外部服务交互。当通过Corda node cli调用时,这些流能够与外部服务交互。我们已经实现了一个独立的rpc客户端来调用流。我们在尝试通过rpc连接启动节点时遇到以下错误。下面是错误的堆栈跟踪 Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecut

在Corda项目中,我们使用FlowExternalAsyncOperation与外部服务交互。当通过Corda node cli调用时,这些流能够与外部服务交互。我们已经实现了一个独立的rpc客户端来调用流。我们在尝试通过rpc连接启动节点时遇到以下错误。下面是错误的堆栈跟踪

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;
    at net.corda.client.rpc.internal.RPCClientProxyHandler.createRpcObservableMap(RPCClientProxyHandler.kt:205)
    at net.corda.client.rpc.internal.RPCClientProxyHandler.<init>(RPCClientProxyHandler.kt:168)
    at net.corda.client.rpc.internal.RPCClientProxyHandler.<init>(RPCClientProxyHandler.kt:108)
    at net.corda.client.rpc.internal.RPCClient$start$1.invoke(RPCClient.kt:90)
    at net.corda.client.rpc.internal.RPCClient$start$1.invoke(RPCClient.kt:32)
    at net.corda.core.internal.InternalUtils.logElapsedTime(InternalUtils.kt:224)
    at net.corda.core.internal.InternalUtils.logElapsedTime(InternalUtils.kt:214)
    at net.corda.client.rpc.internal.RPCClient.start(RPCClient.kt:72)
    at net.corda.client.rpc.CordaRPCClient.start(CordaRPCClient.kt:620)
    at net.corda.client.rpc.CordaRPCClient.start(CordaRPCClient.kt:575)
    at net.corda.client.rpc.CordaRPCClient.start(CordaRPCClient.kt:529)
    at net.corda.client.rpc.CordaRPCClient.start$default(CordaRPCClient.kt:527)
    at net.corda.client.rpc.CordaRPCClient.start(CordaRPCClient.kt)
线程“main”java.lang.NoSuchMethodError中的异常:com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor; 位于net.corda.client.rpc.internal.RPCClientProxyHandler.createRpcObservableMap(RPCClientProxyHandler.kt:205) 位于net.corda.client.rpc.internal.RPCClientProxyHandler.(RPCClientProxyHandler.kt:168) 位于net.corda.client.rpc.internal.RPCClientProxyHandler.(RPCClientProxyHandler.kt:108) 位于net.corda.client.rpc.internal.RPCClient$start$1.invoke(RPCClient.kt:90) 位于net.corda.client.rpc.internal.RPCClient$start$1.invoke(RPCClient.kt:32) at net.corda.core.internal.InternalUtils.logElapsedTime(InternalUtils.kt:224) at net.corda.core.internal.InternalUtils.logElapsedTime(InternalUtils.kt:214) 位于net.corda.client.rpc.internal.RPCClient.start(RPCClient.kt:72) 位于net.corda.client.rpc.cordarpclient.start(cordarpclient.kt:620) 位于net.corda.client.rpc.cordarpclient.start(cordarpclient.kt:575) 位于net.corda.client.rpc.cordarpclient.start(cordarpclient.kt:529) 位于net.corda.client.rpc.cordarpclient.start$default(cordarpclient.kt:527) 位于net.corda.client.rpc.cordarpclient.start(cordarpclient.kt)
将解决方案放入答案中。 这个问题主要是由于依赖项中的版本不匹配造成的。本例可能有同一库的两个不同版本。其中一个可以使用gradle排除

例如:

compile('org.springframework.boot:spring-boot-starter-web') {    
    exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
}

这通常表示编译和运行应用程序时使用了不同版本的库。这是由于项目中存在两个不同版本的guava依赖项。通过使用排除依赖项