我正在尝试使用protobuf-gradle-plugin生成文件描述符:
protobuf {
// Configure the protoc executable
protoc {
artifact = "com.google.protobuf:protoc:$dependencyVersions.protobuf"
generatedFilesBaseDir = "$projectDir/src/generated-sources"
}
generateProtoTasks {
all().each { task ->
task.generateDescriptorSet = true
task.descriptorSetOptions.path = "$projectDir/src/generated-sources/descriptors/{$task.sourceSet.name}.dsc"
}
}
}
sourceSets {
main {
proto {
srcDir 'src/main/proto'
exclude 'google/*'
}
}
}
但这只会生成一个描述符文件:{main}.desc
。我应该为许多原型文件设置一个描述符文件吗?如果没有,我将如何使用插件为每个原型文件生成单独的描述符文件?
答案 0 :(得分:2)
我认为每个proto都会有一个单独的文件,但看起来我们只能为所有protos生成一个大文件描述符:descriptors.dsc
。
事后看来,多个描述符文件并不是必需的,因为你可以很容易地在Java中使用这个文件:
final FileInputStream fileInputStream = new FileInputStream("directory/descriptors.dsc");
final DescriptorProtos.FileDescriptorSet descriptorSet = DescriptorProtos.FileDescriptorSet.parseFrom(fileInputStream);
for (DescriptorProtos.FileDescriptorProto fileDescriptor : descriptorSet.getFileList()) {
// Do as you wish with fileDescriptor
}