java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgument

Nar*_*esh 23 java maven grpc-java

我试图在我的本地运行这个grpc-Java示例.相应的原型文件在这里.当我尝试在本地运行它会从这里抛出以下异常:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
    at io.grpc.ServiceDescriptor.validateMethodNames(ServiceDescriptor.java:129)
    at io.grpc.ServiceDescriptor.<init>(ServiceDescriptor.java:83)
    at io.grpc.ServiceDescriptor.<init>(ServiceDescriptor.java:51)
    at io.grpc.ServiceDescriptor$Builder.build(ServiceDescriptor.java:219)
    at io.grpc.examples.helloworld.GreeterGrpc.getServiceDescriptor(GreeterGrpc.java:251)
    at io.grpc.examples.helloworld.GreeterGrpc$GreeterImplBase.bindService(GreeterGrpc.java:84)
    at io.grpc.internal.AbstractServerImplBuilder.addService(AbstractServerImplBuilder.java:125)
    at io.grpc.internal.AbstractServerImplBuilder.addService(AbstractServerImplBuilder.java:63)
    at com.cw.predictive.HelloWorldServer.start(HelloWorldServer.java:56)
    at com.cw.predictive.HelloWorldServer.main(HelloWorldServer.java:92)
Run Code Online (Sandbox Code Playgroud)

这是我在这里提到的pom.xml :

 <dependencies>
         <dependency>
          <groupId>io.grpc</groupId>
          <artifactId>grpc-netty</artifactId>
          <version>1.1.2</version>
        </dependency>

      <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-protobuf</artifactId>
        <version>1.1.2</version>
      </dependency>

      <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-stub</artifactId>
        <version>1.1.2</version>
      </dependency>
  </dependencies>
Run Code Online (Sandbox Code Playgroud)

小智 17

**Please add following dependencies in your project.**
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>23.6-jre</version>
</dependency> 
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.8</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

  • 我也遇到了同样的问题,我通过将 com.google.inject.guice 的版本从 4.1.0 更新到 4.2.2 解决了这个问题。我意识到,guice 使用的是 19.0 版本的番石榴,它导致了 checkArgument 没有这样的方法的错误。通过更新guice的版本,问题解决了。您可以通过“mvn dependency:tree”检查是否有另一个使用guava的库,并且可以更新它。 (4认同)
  • 我有这个问题,即使现在使用的是更高版本,也无法解决,如果有问题,我会将其放在grpc依赖项之前。另外,我的应用似乎根本没有使用httpcore工件。我尝试了很多事情,但感到很困惑。 (2认同)

Las*_*sus 5

对于在 EMR 上遇到此错误的其他人。为了对 S3 文件使用 s3a 地址系统,我需要 S3aFileSystem Jar,但它在 EMR 6.7、Hadoop 3.2.1 集群上似乎不可用 - 否则我会收到错误Class org.apache.hadoop.fs.s3a.S3AFileSystem not found。为了解决这个问题,我将其包含--packages org.apache.hadoop:hadoop-aws:3.2.1在 Spark-submit 参数中。然后我开始收到OP问题中指出的错误。降级到 3.2.0 解决了这个问题,但随后我遇到了另一个错误;NoSuchMethodError: SemaphoredDelegatingExecutor while writing files to S3。我通过升级到 3.2.2: 解决了这个问题--packages org.apache.hadoop:hadoop-aws:3.2.2。然后我就可以使用 EMR 6.7 读取和写入 S3a 地址