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

wnvonmuf  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(262)

我正在使用scalapb(版本0.11.1)和插件sbt protoc(版本1.0.3)在scala2.12中使用protocolbuffers编译一个旧项目。在阅读文档时,我想设置文件属性 preserve_unknown_fieldsfalse . 但我的问题是,在哪里?我需要在哪里设置此标志?在.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"; 开始的时候,但没用。
任何帮助都将不胜感激。

0ve6wy6x

0ve6wy6x1#

从文档中:
如果您正在使用sbt协议并导入诸如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的include路径中提供它们。
通过设置 preserve_unknown_fields 如果为false,则关闭protobuf功能,该功能可以防止分布式系统的不同部分运行的架构版本不同时数据丢失。

相关问题