Java grpc和tikv Java:NoSuchFieldError:CONTEXT\u SPAN\u键

Java grpc和tikv Java:NoSuchFieldError:CONTEXT\u SPAN\u键,java,maven,grpc,grpc-java,tikv,Java,Maven,Grpc,Grpc Java,Tikv,我将java grpc与tikv java一起使用(它们单独工作正常)。但我正与以下错误作斗争: Exception in thread "main" java.lang.NoSuchFieldError: CONTEXT_SPAN_KEY at io.grpc.internal.CensusTracingModule$TracingClientInterceptor.interceptCall(CensusTracingModule.java:327) at i

我将java grpc与tikv java一起使用(它们单独工作正常)。但我正与以下错误作斗争:

Exception in thread "main" java.lang.NoSuchFieldError: CONTEXT_SPAN_KEY
        at io.grpc.internal.CensusTracingModule$TracingClientInterceptor.interceptCall(CensusTracingModule.java:327)
        at io.grpc.ClientInterceptors$InterceptorChannel.newCall(ClientInterceptors.java:104)
        at io.grpc.internal.ManagedChannelImpl.newCall(ManagedChannelImpl.java:551)
        at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:113)
        at com.pv.app.GetInsertServiceGrpc$GetInsertServiceBlockingStub.insert(GetInsertServiceGrpc.java:195)
        at com.pv.app.Client.main(Client.java:55)
我的代码客户端:

package com.pv.app;

import io.grpc.*;

public class Client {
  public static void main(String[] args) throws Exception {
    // Channel is the abstraction to connect to a service endpoint
    // Let's use plaintext communication because we don't have certs
    final ManagedChannel channel =
        ManagedChannelBuilder.forTarget("0.0.0.0:8080").usePlaintext().build();


    GetInsertServiceGrpc.GetInsertServiceBlockingStub stub =
        GetInsertServiceGrpc.newBlockingStub(channel);
    GetInsertServiceOuterClass.HelloMessage request =
        GetInsertServiceOuterClass.HelloMessage.newBuilder().setName("hello").build();

    System.out.println(request);

    System.out.println("b4 req");

    // Finally, make the call using the stub
    stub.insert(request);

    channel.shutdownNow();
  }
}


我的代码服务器:

package com.pv.app;

import io.grpc.Server;
import io.grpc.ServerBuilder;



/** Hello world! */
public class App {
  public static void main(String[] args) throws Exception {

    System.out.println("Hello-start");
    Server server = ServerBuilder.forPort(8080).addService(new GetInsertServiceImpl()).build();

    // Start the server
    server.start();

    // Server threads are running in the background.
    System.out.println("Server started");
    // Don't exit the main thread. Wait until server is terminated.
    server.awaitTermination();

  }
}

我的代码实现:

package com.pv.app;


import org.tikv.common.TiConfiguration;
import org.tikv.common.TiSession;
import org.tikv.raw.RawKVClient;

public class GetInsertServiceImpl
    extends GetInsertServiceGrpc.GetInsertServiceImplBase {

  @Override
  public void insert(
      GetInsertServiceOuterClass.HelloMessage request,
      io.grpc.stub.StreamObserver<com.google.protobuf.Empty> responseObserver) {
    // HelloRequest has toString auto-generated.
    System.out.println("insert");
    System.out.println(request);
    TiConfiguration conf = TiConfiguration.createRawDefault("pd0:2379");
    System.out.println(1);
    System.out.println("2");
    System.out.println(conf);
    TiSession session = TiSession.create(conf);
    System.out.println("3");
    RawKVClient client = session.createRawClient();
    System.out.println("4");



    // When you are done, you must call onCompleted.
    responseObserver.onCompleted();
  }
}

我如何部署:

  • 在下载的repo中,我执行mvn清理安装-Dmaven.test.skip=true
  • 在我的项目文件夹中
  • 在我的项目pom.xml中
有人对如何修复有什么建议吗

完整代码可用


我进行了搜索,试图排除grpc和opencensus,切换版本-没有帮助。

问题是由io冲突引起的。opencensus版本。我能够通过在tikv/client java项目中对其进行着色来修复它

在tikv/client java、pom.xml、maven shade插件配置中:

<relocations>
    ...
    <relocation>
        <pattern>io.opencensus</pattern>
        <shadedPattern>shade.io.opencensus</shadedPattern>
    </relocation>
<relocations>

...
开放式普查
shade.io.opencensus
更新

我刚刚意识到pom.xml昨天被合并到master中,所以如果您还没有更新它,您可能需要更新它

更新2


我刚刚用最新版本的tikv/client-java检查了您的项目。
NoSuchFieldError:CONTEXT\u SPAN\u键
不见了。还有其他错误(java.net.UnknownHostException),但它们并不相关。

这看起来像是一个依赖性问题。您能否启用Maven Enforcer的requireUpperBoundDeps并查看它发现了哪些问题?为了example@EricAnderson
[INFO]——maven enforcer插件:1.4.1:enforce(enforce)@tikv连接器--[INFO]
。没有输出…@Eric Anderson这里是项目的链接,我想这与grpc和tikv java库的依赖关系有一些冲突。我试图从另一个中排除一个(shade插件对一些重复项给出了警告),但没有帮助TIKV客户端java是标准库吗?因为我无法获得maven repository,可用的maven repo是:com.pingcap.tikv tikv client 2.0,正如@Mafor所说,
io.opencensus
冲突导致了问题
tikv java客户端
将其grpc版本升级到1.17.0,并带来了这个问题,因为它没有着色。有一个PR将其修复并合并到master@techkuz您可以在此处查看:
mvn install:install-file \
-Dfile=../client-java/target/tikv-client-java-2.0-SNAPSHOT.jar  \
-DgroupId=org.tikv \
-DartifactId=tikv-client-java \
-Dversion=2.0-SNAPSHOT \
-Dpackaging=jar
<dependency>
  <groupId>org.tikv</groupId>
  <artifactId>tikv-client-java</artifactId>
  <version>2.0-SNAPSHOT</version>
</dependency>
mvn -DskipTests package exec:java -Dexec.mainClass=com.pv.app.App  
mvn -DskipTests package exec:java -Dexec.mainClass=com.pv.app.Client 
<relocations>
    ...
    <relocation>
        <pattern>io.opencensus</pattern>
        <shadedPattern>shade.io.opencensus</shadedPattern>
    </relocation>
<relocations>