gradleプロジェクトにProtobufプラグインを追加する方法
gradleプロジェクトにProtobufプラグインを追加する手順です。
plugins { id "com.google.protobuf" version "0.8.18" // この1行追加する }
6つのタスクが追加されています。(gradlew.bat tasks --all
)
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~~というエラーになります
sourceSets { main { proto { srcDir("src/main/proto2") } } }
Protocol BuffersからJavaファイルを自動生成する
protoファイルからjavaファイルを自動生成してみます。
C:\>gradlew.bat generateProto
これで、build\generated\source\proto\main配下にJavaソースが自動生成されます。
自動生成ソースの出力先変更(generatedFilesBaseDir)
protoファイルから自動生成されるされるファイルのデフォルトはbuild\generated\source\proto\配下ですが、これを変更することができます。protobuf{}内にgeneratedFilesBaseDirで出力先を記述します。
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.,
タスク実行します。
C:\>gradlew.bat generateProto
gradlew.bat installDist
タスクでもbuild配下に自動生成されたJavaソースがコンパイルされることを確認しました。
自動生成ソースを認識させる
自動生成したソースを認識させるためにsourceSets.main.java内に生成したjavaソース先を指定しておきます。この指定がないとJavaソースが見つからずエラーとなりますので指定が必要です。
sourceSets { main { java { srcDirs 'build/generated/source/proto/main/grpc' srcDirs 'build/generated/source/proto/main/java' } } }
src\generated配下にする例です。
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' } } }
参考サイト
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント