按照之前文章的方法来自动自动生成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,where
generatedFilesBaseDir 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会看到自动生成的文件到我们想要的目录了。
参考:
https://github.com/google/protobuf-gradle-plugin
https://stackoverflow.com/questions/32820728/simple-protobuf-compilation-with-gradle