将文件级选项设置为 scalapb 项目

Set file-level option to scalapb project

我正在使用 ScalaPB(版本 0.11.1)和插件 sbt-protoc(版本 1.0.3)尝试在 Scala 2.12 中使用 ProtocolBuffers 编译旧项目。读取 documentation,我想将文件 属性 preserve_unknown_fields 设置为 false。但我的问题是,在哪里?我需要在哪里设置这个标志?在 .proto 文件上?

我还尝试通过在我的其他 .proto 文件旁边创建一个 package.proto 文件来将该标志作为包范围的选项包含在内,该文件具有以下内容(指定为 here):

import "scalapb/scalapb.proto";

package eur.astrata.eu.bigdata.tpms.protobuf;

option (scalapb.options) = {
  preserve_unknown_fields: false
};

但是在尝试编译时,出现以下错误:

[libprotobuf WARNING T:\src\github\protobuf\src\google\protobuf\compiler\parser.cc:648] No syntax specified for the proto file: package.proto. Please use 'syntax = "proto2";' or 'syntax = "proto3";' to specify a syntax version. (Defaulted to proto2 syntax.)
scalapb/scalapb.proto: File not found.
package.proto:1:1: Import "scalapb/scalapb.proto" was not found or had errors.

我一开始也尝试过 syntax = "proto3"; 但它不起作用。

如有任何帮助,我们将不胜感激。

来自the docs

If you are using sbt-protoc and importing protos like scalapb/scalapb.proto, or common protocol buffers like google/protobuf/wrappers.proto:

Add the following to your build.sbt:

libraryDependencies += "com.thesamet.scalapb" %% "scalapb-runtime" % scalapb.compiler.Version.scalapbVersion % "protobuf"

This tells sbt-protoc to extract protos from this jar (and all its dependencies, which includes Google's common protos), and make them available in the include path that is passed to protoc.

重要的是要补充一点,通过将 preserve_unknown_fields 设置为 false,您将关闭 protobuf 功能,当分布式系统的不同部分不是 运行 相同版本时,该功能可以防止数据丢失模式。