使用protobuf-gradle-plugin生成protobuf文件描述符

时间:2016-06-21 02:12:00

标签: java gradle build protocol-buffers

我正在尝试使用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。我应该为许多原型文件设置一个描述符文件吗?如果没有,我将如何使用插件为每个原型文件生成单独的描述符文件?

1 个答案:

答案 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
}