【问题标题】:Set file-level option to scalapb project将文件级选项设置为 scalapb 项目
【发布时间】:2021-07-13 20:20:32
【问题描述】:

我正在使用 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";,但它不起作用。

任何帮助将不胜感激。

【问题讨论】:

  • 应该在src/main/protobuf
  • @mfirry 谢谢。文件已经在那个位置

标签: scala protocol-buffers scalapb


【解决方案1】:

来自the docs

如果您使用 sbt-protoc 并导入 protos,例如 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 的通用原型),并在 包含传递给 protoc 的路径。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 2011-06-08
    • 2023-03-07
    • 1970-01-01
    • 2019-09-04
    • 2016-10-20
    相关资源
    最近更新 更多