1

我在需要访问 FileDescriptorSet 的项目中使用 scalapb。除了所有其他类文件之外,有没有办法让 scalapb 生成 .desc 文件?或者是否有某种编程方式从已经生成的内容中获取 FileDescriptorSet?

4

1 回答 1

3

是的,对于这两个问题。

如果您使用sbt-protoc,则可以在 SBT 文件中具有以下定义:

PB.protocOptions in Compile := Seq(
    "--descriptor_set_out=" + 
        (baseDirectory in Compile).value.getParentFile / "src" / "main" / "resources" /"out.desc"
)

一个警告是你必须src/main/resources自己创建,否则你会得到一个错误。生成到中可能会更好resourceManaged(这也需要提前创建一个目录,因为protoc不这样做)

您还可以在运行时构建 FileDescriptorSet。对于每个 proto 文件,ScalaPB 生成一个 Scala 对象scalaDescriptorjavaDescriptor如果这样更方便的话)。描述符包含它们的依赖项列表,这些依赖项也是FileDesciptors - 您可以遍历该树结构并构建一个FileDescriptors 列表,该列表本质上是一个FileDescriptorSet.

于 2018-10-04T01:44:25.743 回答