使用 scalapb 生成文件描述符集 (.desc)
Generate file descriptor set (.desc) with scalapb
我在需要访问 FileDescriptorSet 的项目中使用 scalapb。除了所有其他 class 文件之外,还有没有办法让 scalapb 生成 .desc 文件?或者是否有某种编程方式从已经生成的内容中获取 FileDescriptorSet?
是的,这两个问题。
如果您使用 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 生成一个带有 scalaDescriptor
的 Scala 对象(如果更方便的话,还有 javaDescriptor
)。描述符包含它们的依赖项列表,它们也是 FileDesciptor
s - 你可以遍历该树结构并构建一个 FileDescriptor
s 列表,它本质上是一个 FileDescriptorSet
.
我在需要访问 FileDescriptorSet 的项目中使用 scalapb。除了所有其他 class 文件之外,还有没有办法让 scalapb 生成 .desc 文件?或者是否有某种编程方式从已经生成的内容中获取 FileDescriptorSet?
是的,这两个问题。
如果您使用 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 生成一个带有 scalaDescriptor
的 Scala 对象(如果更方便的话,还有 javaDescriptor
)。描述符包含它们的依赖项列表,它们也是 FileDesciptor
s - 你可以遍历该树结构并构建一个 FileDescriptor
s 列表,它本质上是一个 FileDescriptorSet
.