scala - 将文件级选项设置为 scalapb 项目
问题描述
我正在使用 ScalaPB(0.11.1 版)和插件 sbt-protoc(1.0.3 版)尝试在 Scala 2.12 中使用 ProtocolBuffers 编译一个旧项目。阅读文档,我想将文件属性设置preserve_unknown_fields
为false
. 但我的问题是,在哪里?我需要在哪里设置这个标志?在 .proto 文件上?
我还尝试通过在我的另一个 .proto 文件旁边创建一个 package.proto 文件来包含该标志作为包范围选项,该文件具有以下内容(如此处指定):
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";
一开始也尝试过,但它不起作用。
任何帮助将不胜感激。
解决方案
从文档:
如果你正在使用 sbt-protoc 并导入像 scalapb/scalapb.proto 这样的原型,或者像 google/protobuf/wrappers.proto 这样的常见协议缓冲区:
将以下内容添加到您的 build.sbt:
libraryDependencies += "com.thesamet.scalapb" %% "scalapb-runtime" % scalapb.compiler.Version.scalapbVersion % "protobuf"
这告诉 sbt-protoc 从这个 jar 中提取 protos(及其所有依赖项,包括 Google 的公共 protos),并使其在传递给 protoc 的包含路径中可用。
重要的是要补充一点,通过设置preserve_unknown_fields
为 false,您将关闭一个 protobuf 功能,当分布式系统的不同部分未运行相同版本的模式时,该功能可以防止数据丢失。
推荐阅读
- node.js - 从 mongodb / nodejs 查询嵌套对象数组
- sql-server - 在 SQL 中使用 Count 和 group by 进行内连接
- jquery - 使用 InputMask jQuery 插件选择所有字段内容
- javascript - Gatsby/React: how to create clean fallback for non JS users?
- javascript - 反应:在新标签页中打开链接
- amazon-web-services - 在 GCP 中指向并使用子域
- apache-kafka - Kafka:消费者可以在所有副本同步之前读取消息吗?
- mysql - 在不使用 SQL 字符串的情况下使用 Python 写入 MySQL
- css - 指定宽度时将高度设置为自动有什么意义?
- python - 动画中的networkx图形变化形式