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(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^




コメント