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