Corda 项目中的 NoSuchMethodError 异常
NoSuchMethodError Exception in Corda Project
在我们的 Corda 项目中,我们使用 FlowExternalAsyncOperation 与外部服务进行交互。当通过 Corda 节点 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.invoke(RPCClient.kt:90)
at net.corda.client.rpc.internal.RPCClient$start.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)
将解决方案放在答案中。
该问题主要是由于依赖项中的版本不匹配造成的。这种情况下可能有同一个库的两个不同版本。可以使用 gradle.
排除其中之一
示例:
compile('org.springframework.boot:spring-boot-starter-web') {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
}
在我们的 Corda 项目中,我们使用 FlowExternalAsyncOperation 与外部服务进行交互。当通过 Corda 节点 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.invoke(RPCClient.kt:90)
at net.corda.client.rpc.internal.RPCClient$start.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)
将解决方案放在答案中。 该问题主要是由于依赖项中的版本不匹配造成的。这种情况下可能有同一个库的两个不同版本。可以使用 gradle.
排除其中之一示例:
compile('org.springframework.boot:spring-boot-starter-web') {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
}