4

GRPC Java サーバーをコンパイルする方法を理解するのに非常に苦労しています。grpc.io の Web サイトを隅々まで調べたところ、最も近いのはhttp://www.grpc.io/docs/#quick-startで、 ../gradlew -PskipCodegen=true installDistビルドと ./build/install/grpc-examples/bin/hello-world-clientクライアントの実行に使用されました。これはすべて機能しますが、hello-world チュートリアルのみです。自分のクライアント/サーバーでこれを行う方法がわかりません。.proto ファイルを使用して、クライアント/サーバーの protobufs を生成できます。readme と Java チュートリアルを調べたところ、 https://github.com/grpc/grpc-java/blob/master/examples/READMEを書いた後、実際のサーバー (およびクライアント) をコンパイルする方法がわかりませんでした 。 md (十分な評判がないため、Javaチュートリアルをリンクできません)。ドキュメントが不足していない限り、.proto ファイルから生成された GRPC クラスを実装するサーバーとクライアントをコンパイルする方法を知っている人はいますか? かなりの時間をかけて探しました。どんなアドバイスでも大歓迎です、ありがとう。

4

3 に答える 3

6

同様の問題もあります。次のことを確認してください。

  1. を正しく構成し、実行可能ファイルprotocダウンロードして、OS の環境変数として構成します。
  2. ファイルにはbuild.gradle、必ずprotobuf-gradle-pluginを含めてください。

    apply plugin: 'java'
    apply plugin: 'idea'
    apply plugin: 'com.google.protobuf'
    
    ext.grpcVersion = '1.0.1'
    ext.protobufVersion = '3.0.2'
    
    buildscript {
    repositories { mavenCentral() }
    dependencies { 
    classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.0' }
    }
    
    repositories {
    mavenCentral()
    }
    
    dependencies {
    compile "com.google.protobuf:protobuf-java:${protobufVersion}"
    compile "io.grpc:grpc-all:${grpcVersion}"
    }
    
    protobuf {
    protoc { artifact = "com.google.protobuf:protoc:${protobufVersion}"     }
    plugins { grpc { artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}" } }
    generateProtoTasks { ofSourceSet('main')*.plugins { grpc { } } }
    }
    
    idea {
    module {
        sourceDirs +=     file("${protobuf.generatedFilesBaseDir}/main/java");
        sourceDirs += file("${protobuf.generatedFilesBaseDir}/main/grpc");
    }
    }
    
  3. あなたのprotoファイル:

    syntax = "proto3";
    package com.company.project;
    
    service CompanyService{
        rpc call(RequestMessage) returns (ResponseMessage) {}
    }
    
  4. を実行gradle clean buildすると、 のサービス クラスとクライアント クラスが生成されますCompanyService

プラグインは、ideaIntelliJ に をsrc/main/protoソース セットとして認識させるためのものです。

  1. applicationクライアントとサーバーを実際に実行するには、実行可能ファイルを正しく生成するために、gRpc のチュートリアルで説明されているように実装を行い、プラグインを適用する必要があります。jar

    //build.grdle code...
    apply plugin: 'application'
    mainClassName = 'com.company.project.MainClass'
    jar { manifest { attributes('Main-Class' : mainClassName) } }
    
于 2016-09-27T22:07:59.290 に答える
0

この質問には、「Eric Anderson」が groups.google.com で回答しています:

JAR にはコードのみが含まれています。すべての依存関係を含む「太い」jar を作成したいようです。次のようなことができます。

jar {
      from {
          configurations.compile.collect {
              it.isDirectory() ? it : zipTree(it)
        }
    }
}

これは gRPC 固有ではないことに注意してください。それはGradleで動作しているだけです。迅速なグーグルがgradle-fatjar-pluginを返すなど、代替手段があるかもしれません。

于 2015-11-03T23:38:21.133 に答える