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
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會看到自動生成的檔案到我們想要的目錄了。
參考: