2016-12-02 5 views
1

Google Cloudで実行するデータフロージョブを取得しようとしています。リオ/ grpc/MethodDescriptorを$マーシャラーDataflowがjava.lang.NoSuchMethodErrorで失敗する:io.grpc.protobuf.ProtoUtils.marshaller(Lcom/google/protobuf/Message;)

それは、Mavenプロジェクトです; io.grpc.protobuf.ProtoUtils.marshaller(LCOM /グーグル/いるProtobuf /メッセージ):

java.lang.NoSuchMethodErrorの:それは常にで失敗しますここに私の依存関係です:

<dependencies> 
    <dependency> 
    <groupId>com.google.cloud.dataflow</groupId> 
    <artifactId>google-cloud-dataflow-java-sdk-all</artifactId> 
    <version>1.8.0</version> 
    </dependency> 
    <dependency> 
    <groupId>com.google.cloud</groupId> 
    <artifactId>google-cloud-pubsub</artifactId> 
    <version>0.4.0</version> 
    </dependency>  
    <dependency> 
    <groupId>com.google.protobuf</groupId> 
    <artifactId>protobuf-java</artifactId> 
    <version>3.0.0</version> 
    </dependency>  
</dependencies> 

私はさまざまな依存関係のバージョンを試してみました。私は何が欠けていますか?

私はexec:javaかshade jar経由で実行しても同じ結果が得られます。

のフルスタックトレース:

(e8dbd0c1b8b8a22): java.lang.NoSuchMethodError: io.grpc.protobuf.ProtoUtils.marshaller(Lcom/google/protobuf/Message;)Lio/grpc/MethodDescriptor$Marshaller; at com.google.iam.v1.IAMPolicyGrpc.(IAMPolicyGrpc.java:56) at com.google.cloud.pubsub.spi.v1.PublisherSettings$Builder.(PublisherSettings.java:487) at com.google.cloud.pubsub.spi.v1.PublisherSettings$Builder.createDefault(PublisherSettings.java:508) at com.google.cloud.pubsub.spi.v1.PublisherSettings$Builder.access$000(PublisherSettings.java:402) at com.google.cloud.pubsub.spi.v1.PublisherSettings.defaultBuilder(PublisherSettings.java:224) at com.google.cloud.pubsub.spi.DefaultPubSubRpc.(DefaultPubSubRpc.java:138) at com.google.cloud.pubsub.PubSubOptions$DefaultPubSubRpcFactory.create(PubSubOptions.java:60) at com.google.cloud.pubsub.PubSubOptions$DefaultPubSubRpcFactory.create(PubSubOptions.java:54) at com.google.cloud.ServiceOptions.rpc(ServiceOptions.java:399) at com.google.cloud.pubsub.PubSubImpl.(PubSubImpl.java:115) at com.google.cloud.pubsub.PubSubOptions$DefaultPubSubFactory.create(PubSubOptions.java:43) at com.google.cloud.pubsub.PubSubOptions$DefaultPubSubFactory.create(PubSubOptions.java:38) at com.google.cloud.ServiceOptions.service(ServiceOptions.java:391) at com.google.lindsaysmith.titan.DataflowBulkLoadNodes$SendPubSub.sendPubsubMessage(DataflowBulkLoadNodes.java:41) at com.google.lindsaysmith.titan.DataflowBulkLoadNodes$SendPubSub.processElement(DataflowBulkLoadNodes.java:32) at com.google.cloud.dataflow.sdk.util.SimpleDoFnRunner.invokeProcessElement(SimpleDoFnRunner.java:49) at com.google.cloud.dataflow.sdk.util.DoFnRunnerBase.processElement(DoFnRunnerBase.java:139) at com.google.cloud.dataflow.sdk.runners.worker.SimpleParDoFn.processElement(SimpleParDoFn.java:190) at com.google.cloud.dataflow.sdk.runners.worker.ForwardingParDoFn.processElement(ForwardingParDoFn.java:42) at com.google.cloud.dataflow.sdk.runners.worker.DataflowWorkerLoggingParDoFn.processElement(DataflowWorkerLoggingParDoFn.java:47) at com.google.cloud.dataflow.sdk.util.common.worker.ParDoOperation.process(ParDoOperation.java:55) at

+0

本当に助けることができるのは、あなたがそれを共有できるなら、 'mvn dependency:tree'の出力です。参照してくださいhttp://stackoverflow.com/questions/35793632/grpc-with-dataflow-java-lang-nosuchmethoderror –

答えて

1

このような状況では通常の答えはあなたが本当に正確gRPCとプロトコルバッファのバージョンを使用しなければならないということですが、データフローSDKの依存関係に宣言しました。これにはすべての推移的な依存関係が含まれているため、他のライブラリのgRPCやprotobufの依存関係を抑制しなければならない場合があります。

バージョンhere (gRPC)here (protobuf)が表示されます。私はこの回答からそれらを去っているので、それは時代遅れになることはありません。

+0

ヒントをありがとう、それは実際にここで問題がpubsubライブラリでした - それははるかに新しいgrpcを参照して他の2つのライブラリのバージョン。 0.3.0に戻ると、NoSuchMethodExceptionが修正されます。 –

+0

非常に良い点 - 「あなた」がライブラリを使用しているだけでなく、依存関係ツリー全体の中に何かがある場合は、私の答えを少し更新しました。 –

関連する問題