gradle + javaでgRPC
実行環境
% gradle --version
------------------------------------------------------------
Gradle 8.11
------------------------------------------------------------
Build time: 2024-11-11 13:58:01 UTC
Revision: b2ef976169a05b3c76d04f0fa76a940859f96fa4
Kotlin: 2.0.20
Groovy: 3.0.22
Ant: Apache Ant(TM) version 1.10.14 compiled on August 16 2023
Launcher JVM: 23.0.1 (Homebrew 23.0.1)
Daemon JVM: /opt/homebrew/Cellar/openjdk/23.0.1/libexec/openjdk.jdk/Contents/Home (no JDK specified, using current Java home)
OS: Mac OS X 13.2.1 aarch64
% javac --version
javac 23.0.1
% java --version
openjdk 23.0.1 2024-10-15
OpenJDK Runtime Environment (build 23.0.1+11-39)
OpenJDK 64-Bit Server VM (build 23.0.1+11-39, mixed mode, sharing)
gradleでprotoファイルをビルドして、interfaceを実装するためのメモです。
document:
https://grpc.io/docs/languages/java/quickstart/
project:
https://github.com/grpc/grpc-java/tree/v1.69.0/examples
$ git clone -b v1.69.0 --depth 1 https://github.com/grpc/grpc-java
$ cd grpc-java/examples
実行タスク一覧。
$ ./gradlew tasks --all
define proto
Write build.gradle
plugin
pluginはprotoやapplicationのビルドタスクを使用するために必要です。
./gradlew generateProto
でprotoをビルドしたり、./gradlew installDist
でアプリをビルドしたりできます。
plugins {
// Provide convenience executables for trying out the examples.
id 'application'
id 'com.google.protobuf' version '0.9.4'
// Generate IntelliJ IDEA's .idea & .iml project files
id 'idea'
}
パス指定
build.gradle
のsourceSets
にprotoの入出力パスを明記します。入力パスは明記しない場合、build.gradle
ファイルが配置されている階層の直下のパスsrc/main/proto
がデフォルトのディレクトリパスとなります。*.proto
ファイルがビルド対象です。
sourceSets {
main {
java {
srcDirs 'build/generated/source/proto/main/grpc'
srcDirs 'build/generated/source/proto/main/java'
}
}
}
パスを変更したい場合
src/main/proto
以外のパスをビルド対象としたい場合は次のように、proto{}
にパスを指定します。
sourceSets {
main {
// protoファイルの配置ディレクトリ
proto {
srcDir 'src/main/protobuf'
}
java {
srcDirs 'build/generated/source/proto/main/grpc'
srcDirs 'build/generated/source/proto/main/java'
}
}
}
今回は次の*.protoファイルがビルド対象です。
% tree src/main/proto/
src/main/proto/
├── grpc
│ └── examples
│ └── echo
│ └── echo.proto
├── hello_streaming.proto
├── helloworld.proto
└── route_guide.proto
compile proto
pluginに'com.google.protobuf'を指定すれば、generateProto
タスクが有効になります。
examples % ./gradlew generateProto
'build/generated/source/proto/main/grpc'に生成されます。
BUILD SUCCESSFUL in 1s
3 actionable tasks: 3 up-to-date
Server/Client 実装
protoで指定した関数を実装します。今回は省略。
build for Application
実装したjavaファイルをビルドして実行していきます。
$ ./gradlew installDist
実行
server実行
$ ./build/install/examples/bin/hello-world-server
client実行
$ ./build/install/examples/bin/hello-world-client