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 クラスを実装するサーバーとクライアントをコンパイルする方法を知っている人はいますか? かなりの時間をかけて探しました。どんなアドバイスでも大歓迎です、ありがとう。
質問する
4224 次
3 に答える
6
同様の問題もあります。次のことを確認してください。
- を正しく構成し、実行可能ファイル
protoc
をダウンロードして、OS の環境変数として構成します。 ファイルには
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"); } }
あなたの
proto
ファイル:syntax = "proto3"; package com.company.project; service CompanyService{ rpc call(RequestMessage) returns (ResponseMessage) {} }
を実行
gradle clean build
すると、 のサービス クラスとクライアント クラスが生成されますCompanyService
。
プラグインは、idea
IntelliJ に をsrc/main/proto
ソース セットとして認識させるためのものです。
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 に答える