我使用ScalaPB (0.11.1版)和插件sbt(1.0.3版)在Scala2.12中使用ProtocolBuffers编译一个旧项目。读取文档时,我希望将preserve_unknown_fields文件属性设置为false。但我的问题是,在哪里?我需要在哪里设置这个旗子?在.proto文件上?
我还尝试将该标志作为包作用域选项包括在内,方法是在我的另一个.proto文件旁边创建一个.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";,但是它不起作用。
任何帮助都将不胜感激。
发布于 2021-04-20 05:41:53
来自医生们
如果您正在使用sbt并导入scalapb/scalapb.proto之类的原型,或者像google/protobuf/Wrappers.proto这样的通用协议缓冲区: 在build.sbt中添加以下内容:
libraryDependencies += "com.thesamet.scalapb" %% "scalapb-runtime" % scalapb.compiler.Version.scalapbVersion % "protobuf"这告诉sbt从这个jar (及其所有依赖项,包括Google的公共原型)中提取原型,并在传递给from的包含路径中提供它们。
重要的是,通过将preserve_unknown_fields设置为false,您将关闭一个protobuf特性,该特性可以在分布式系统的不同部分不运行相同版本的模式时防止数据丢失。
https://stackoverflow.com/questions/67165338
复制相似问题