gradleプロジェクトにProtobufプラグインを追加する方法
gradleプロジェクトにProtobufプラグインを追加する手順です。
1 2 3 |
plugins { id "com.google.protobuf" version "0.8.18" // この1行追加する } |
https://plugins.gradle.org/plugin/com.google.protobuf
6つのタスクが追加されています。(gradlew.bat tasks --all
)
1 2 3 4 5 6 |
extractIncludeProto - Extracts proto files from compile dependencies for includes extractIncludeTestProto - Extracts proto files from compile dependencies for includes extractProto - Extracts proto files/dependencies specified by 'protobuf' configuration extractTestProto - Extracts proto files/dependencies specified by 'protobuf' configuration generateProto - Compiles Proto source for 'main' generateTestProto - Compiles Proto source for 'test' |
protoファイルの場所指定
protoファイルのデフォルトの配置場所はsrc/main/proto
ですが、この場所に加えてprotoファイルの場所を追加指定したい場合は以下のように記述します。
※デフォルトのsrc/main/proto
を指定するとduplicate~~というエラーになります
1 2 3 4 5 6 7 |
sourceSets { main { proto { srcDir("src/main/proto2") } } } |
Protocol BuffersからJavaファイルを自動生成する
protoファイルからjavaファイルを自動生成してみます。
1 |
C:\>gradlew.bat generateProto |
これで、build\generated\source\proto\main配下にJavaソースが自動生成されます。
自動生成ソースの出力先変更(generatedFilesBaseDir)
protoファイルから自動生成されるされるファイルのデフォルトはbuild\generated\source\proto\配下ですが、これを変更することができます。protobuf{}内にgeneratedFilesBaseDirで出力先を記述します。
1 2 3 4 5 6 7 8 9 10 |
protobuf { protoc { artifact = "com.google.protobuf:protoc:${protocVersion}" } plugins { grpc { artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}" } } generateProtoTasks { all()*.plugins { grpc {} } } generatedFilesBaseDir = 'build/generated/source/proto2/' // ここで指定する } |
By default generated Java files are under $generatedFilesBaseDir/$sourceSet/$builtinPluginName, where $generatedFilesBaseDir is $buildDir/generated/source/proto by default, and is configurable. E.g.,
タスク実行します。
1 |
C:\>gradlew.bat generateProto |
gradlew.bat installDist
タスクでもbuild配下に自動生成されたJavaソースがコンパイルされることを確認しました。
自動生成ソースを認識させる
自動生成したソースを認識させるためにsourceSets.main.java内に生成したjavaソース先を指定しておきます。この指定がないとJavaソースが見つからずエラーとなりますので指定が必要です。
1 2 3 4 5 6 7 8 |
sourceSets { main { java { srcDirs 'build/generated/source/proto/main/grpc' srcDirs 'build/generated/source/proto/main/java' } } } |
src\generated配下にする例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
protobuf { protoc { artifact = "com.google.protobuf:protoc:3.19.2" } plugins { grpc { artifact = "io.grpc:protoc-gen-grpc-java:1.44.0" } } generateProtoTasks { all()*.plugins { grpc {} } } generatedFilesBaseDir = "$projectDir/src/generated" } sourceSets { main { java { srcDirs 'src/generated/main/grpc' srcDirs 'src/generated/main/java' } } } |
参考サイト
https://github.com/google/protobuf-gradle-plugin

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^