将 'library' 指令添加到使用 protoc 生成的 dart 代码中

Posted

技术标签:

【中文标题】将 \'library\' 指令添加到使用 protoc 生成的 dart 代码中【英文标题】:Add 'library' directive to dart code generated using protoc将 'library' 指令添加到使用 protoc 生成的 dart 代码中 【发布时间】:2018-09-23 13:27:06 【问题描述】:

谁能告诉我如何让 protoc 生成带有前导 library 指令的 dart 文件?

我正在使用 dart-protoc-plugin (v0.10.2) 从 proto 文件生成我的 dart、c++、c#、js 和 java 模型。我的印象是没有办法让 protoc 将“库”指令添加到生成的 dart 文件中,直到我注意到该指令出现在另一个项目中(参见 date.pb.dart)。

如果我使用同一个文件 (date.proto),我无法让 protoc 生成包含“库”指令的 dart 文件。

简而言之:我想取一个 .proto 文件,内容如下

syntax = "proto3";

package another.proj.nspace;

message MyObj 
  ...

并生成一个带有类似于以下 sn-p 的前导“库”指令的 .dart 文件

///
//  Generated code. Do not modify.
///
// ignore_for_file: non_constant_identifier_names,library_prefixes
library another.proj.nspace;
...

注意:我不关心指令的实际值,因为我可以重组我的代码以获得所需的结果。我只需要一种方法让 protoc add library 指令...

我用来生成 dart 文件的基本命令是

protoc --proto_path=./ --dart_out="./" ./another/proj/nspace/date.proto

不幸的是,dart-protoc-plugin 的README 不是很有帮助,我不得不查看源代码以找出可用的选项;目前似乎唯一特定于 dart 的选项与 grpc 相关。

我尝试了其他语言的选项(例如“库”和“基本路径”),但没有任何成功。

如果可能的话,它会大大简化我的工作流程,但我开始觉得date.pb.dart 中的库指令是在生成代码之后添加的......

【问题讨论】:

添加 library 指令的理由不多了。为什么要添加它? 我的项目结构有一个用于网络、移动和桌面的 API,所有这些都依赖于一个核心/共享库。在所有四个库中,我都有名称相同但命名空间不同的类(例如 .../web/app.dart、.../mobile/app.dart 等)。 library 指令只是用来区分它们。 注意:我对将库指令添加到所有生成的模型不感兴趣,只是我所谓的“组”模型中的一两个我不得不使用丑陋的导入来破解结果在 .dart 文件的 proto 文件和后处理中。正如我所说:我有一个工作流程,但如果我可以添加库指令,该工作流程将大大简化...... 【参考方案1】:

询问了一下后,似乎 library 指令在某个阶段从 protoc 插件中删除(see pull request),因此不再支持。

【讨论】:

以上是关于将 'library' 指令添加到使用 protoc 生成的 dart 代码中的主要内容,如果未能解决你的问题,请参考以下文章

protoc编译器使用 grpc 插件编译 .proto 文件

如何使用 Eclipse 启动将本机库添加到“java.library.path”(而不是覆盖它)

添加新消息后的 Proto2 编码/解码问题

使用 maven 将 dll 添加到 java.library.path

cx_freeze:如何将包文件添加到 library.zip 中?

apache 2.4,嵌套if指令