【问题标题】:Cloud Vision API Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument线程“主”java.lang.NoSuchMethodError 中的 Cloud Vision API 异常:com.google.common.base.Preconditions.checkArgument
【发布时间】:2020-07-16 05:35:50
【问题描述】:

我按照https://cloud.google.com/vision/docs/ocr 中的所有步骤操作,执行代码时出现以下异常。

完整的堆栈跟踪:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;CLjava/lang/Object;)V
    at io.grpc.Metadata$Key.validateName(Metadata.java:742)
    at io.grpc.Metadata$Key.<init>(Metadata.java:750)
    at io.grpc.Metadata$Key.<init>(Metadata.java:668)
    at io.grpc.Metadata$AsciiKey.<init>(Metadata.java:959)
    at io.grpc.Metadata$AsciiKey.<init>(Metadata.java:954)
    at io.grpc.Metadata$Key.of(Metadata.java:705)
    at io.grpc.Metadata$Key.of(Metadata.java:701)
    at com.google.api.gax.grpc.GrpcHeaderInterceptor.<init>(GrpcHeaderInterceptor.java:60)
    at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.createSingleChannel(InstantiatingGrpcChannelProvider.java:228)
    at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.access$1500(InstantiatingGrpcChannelProvider.java:71)
    at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider$1.createSingleChannel(InstantiatingGrpcChannelProvider.java:202)
    at com.google.api.gax.grpc.ChannelPool.create(ChannelPool.java:72)
    at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.createChannel(InstantiatingGrpcChannelProvider.java:209)
    at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.getTransportChannel(InstantiatingGrpcChannelProvider.java:192)
    at com.google.api.gax.rpc.ClientContext.create(ClientContext.java:155)
    at com.google.cloud.vision.v1.stub.GrpcImageAnnotatorStub.create(GrpcImageAnnotatorStub.java:117)
    at com.google.cloud.vision.v1.stub.ImageAnnotatorStubSettings.createStub(ImageAnnotatorStubSettings.java:156)
    at com.google.cloud.vision.v1.ImageAnnotatorClient.<init>(ImageAnnotatorClient.java:136)
    at com.google.cloud.vision.v1.ImageAnnotatorClient.create(ImageAnnotatorClient.java:117)
    at com.google.cloud.vision.v1.ImageAnnotatorClient.create(ImageAnnotatorClient.java:108)

我尝试使用不同的 Guava(22.0 和 23.6)和 HttpCore(5.0 和 4.4.8)版本,而不是已经在 Google Cloud Platform Libraries(28.2 和 4.4.12)上使用的版本,但没有成功。

我正在使用 Eclipse 并使用 Eclipse 并按照以下步骤操作:https://cloud.google.com/eclipse/docs/libraries

【问题讨论】:

  • 你愿意分享你的 pom.xml 吗?我对依赖和依赖管理部分感兴趣。
  • 这里是 pom.xml:jsfiddle.net/2m438wfd
  • 我能够从 GitHub 下载整个项目来运行此运行,请参阅最后一个答案。
  • 我没有看到您使用的是 GCP 库 BOM。文档:github.com/GoogleCloudPlatform/cloud-opensource-java/wiki/…。基本上,使用 BOM,您无需设置库的各个版本。
  • 是的,我将这些行添加到 pom.xml 文件中,但我仍然无法正确运行它。我真的不知道出了什么问题,并且能够通过克隆整个视觉项目来修复它。

标签: java eclipse google-cloud-platform google-apis-explorer vision-api


【解决方案1】:

如您所述,此类错误通常表示版本不匹配。您还没有说您使用的是 Maven 还是 Cloud Tools for Eclipse 原生项目。我建议您使用 Maven 设置,以便您可以利用 the Cloud Libraries BOM。这应该可以消除这些版本不匹配。

【讨论】:

  • “我正在使用 Eclipse 并使用 Eclipse 并按照以下步骤操作:cloud.google.com/eclipse/docs/libraries”我试图说我正在使用 Eclipse 工具,实际上是按照该链接上的指南进行操作使用 Eclipse 工具。我会尝试 Maven 并回复你...谢谢
  • 好的,刚刚尝试使用 Maven,我得到了同样的错误。唯一的区别是它让我用 JAVA 1.7 执行它。我用的是1.8。但错误仍然存​​在。
  • 你能告诉我你正在使用的书的版本吗?
  • “书”是什么意思?关于 Cloud Vision,我使用的是今天可用的最新版本(1.99.2),其中一个依赖项是 guava-28.2-android。我猜是别的,不可能是版本不匹配,我尝试了很多不同的番石榴版本...
  • 对不起,我的意思是“bom”。有用的自动更正救援。
【解决方案2】:

该堆栈跟踪表明您的类路径包含旧版本的 Guava,或 OCR 客户端,或两者兼而有之。如果没有要检查的完整项目,我无法确切说明您是如何获得旧版本的——这取决于你如何配置项目——但这绝对是正在发生的事情。

【讨论】:

    【解决方案3】:

    好的,我从 GitHub 克隆了整个 java vision 项目:https://github.com/googleapis/java-vision

    但是由于存在路径错误,我仍然需要添加一些额外的 jar。

    【讨论】:

    • 您无需克隆库存储库即可使用该库。将依赖项添加到您的 pom 中就足够了。
    • 这是让它运行的唯一方法...实际上我什至不得不修改克隆的 repo,因为在 ImageAnnotatorClient 类中它要求实现 AutoClosable,但它没有实现。
    猜你喜欢
    • 2019-06-18
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多