1. 程式人生 > >grpc-gradle與grpc流程完美整合(3)

grpc-gradle與grpc流程完美整合(3)

按照之前文章的方法來自動自動生成proto的程式碼,然後手動從build複製到src程式碼中去,當執行gradle build編譯的時候會拋錯提示類重複,因為執行gradle build,這個命令依賴於gradle generateProto命令,也就是會生成兩次相同的類檔案,所以會丟擲類重複。

修改build.gradle中的protobuf plugin的相關配置來自動將proto生成的程式碼放入到指定目錄,達到完美整合。

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.2.0"
    }
    plugins {
        grpc {
            artifact =
'io.grpc:protoc-gen-grpc-java:1.4.0' } } generatedFilesBaseDir = "src" generateProtoTasks { all()*.plugins { grpc { outputSubDir = "java" } } } }

generatedFilesBaseDir將生成的程式碼放入到指定的目錄,outputSubDir可以看做generatedFilesBaseDir下的指定目錄。因為這兩個引數都有預設目錄路徑,可以嘗試修改之後再生成檔案檢視之間的差別。

分析一下官方所描述的:

Change where the generated files are
By default generated Java files are under generatedFilesBaseDir/sourceSet/builtinPluginName,wheregeneratedFilesBaseDir is $buildDir/generated/source/proto by default, and is configurable. E.g.,

protobuf {
  ...
  generatedFilesBaseDir = "$projectDir/src/generated"
}

The subdirectory name, which is by default $builtinPluginName, can also be changed by setting the outputSubDir property in the builtins or plugins block of a task configuration within generateProtoTasks block (see previous section). E.g.,

{ task ->
  task.plugins {
    grpc {
      // Write the generated files under
      // "$generatedFilesBaseDir/$sourceSet/grpcjava"
      outputSubDir = 'grpcjava'
    }
  }
}

預設配置指定了生成檔案的預設位置。按我們需求修改好之後,重新執行gradle clean generateProto會看到自動生成的檔案到我們想要的目錄了。

參考: