gradleプロジェクトにProtobufプラグインを追加する方法

gradleプロジェクトにProtobufプラグインを追加する方法

gradleプロジェクトにProtobufプラグインを追加する手順です。

plugins {
  id "com.google.protobuf" version "0.8.18" // この1行追加する
}
Gradle - Plugin: com.google.protobuf

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

出力先変更されています。
gradleプロジェクトにProtobufプラグインを追加する方法

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'
    }
  }
}

gradleプロジェクトにProtobufプラグインを追加する方法

参考サイト

GitHub - google/protobuf-gradle-plugin: Protobuf Plugin for Gradle
Protobuf Plugin for Gradle. Contribute to google/protobuf-gradle-plugin development by creating an account on GitHub.

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました