使用rebar3自动生成protobuf的一次踩坑记录
最近需要用到protobuf,所以使用了gpb,由于项目是用rebar3构建的,正好rebar3有插件生成gpb,所以引入了rebar3_gpb_plugin, 按照文档配置参数,但是在生成的时候,导出路径出现了问题。
问题描述
在rebar3 release项目中使用rebar3_gpb_plugin插件的时候,指定的相对路径是基于项目默认profile,所以最终生成的文件也是基于_build/default/lib/app_floder
下的,导致不在开发文件夹内,无法被识别与编译
解决方案
在app目录下的config里单独配置gpb相关参数即可
踩坑过程
各种测试项目对比
类型 | 项目名称 | 结果 |
---|---|---|
rebar3 release | test_gpb_release | 出现问题 |
rebar3 app | test_gpb_app | 未出现问题 |
rebar配置文件
{erl_opts, [
debug_info,
{i, "./_build/default/plugins/gpb/include/"}
]}.
{plugins, [
{rebar3_gpb_plugin, "2.10.0"}
]}.
{gpb_opts, [
{i, "proto"},
{o_erl, "src"},
{o_hrl, "include"},
{module_name_suffix, "_pb"},
{strings_as_binaries, true},
{recursive, true},
type_specs
]}.
{provider_hooks, [
{pre, [{compile, {protobuf, compile}}]}
]}.
执行编译命令之后apps/test_gpb_release
下并未出现生成的协议文件,_build/default/lib/test_gpb_release
下出现了生成的协议文件!
且_build/default/lib/test_gpb_release/ebin
下也没有编译过的文件,所以协议根本没有被编译
然后测试app项目,输出路径正确。
解决过程
百度/google,没有相关信息
咨询前辈,没有得到太多有效信息
查询rebar3文档,配置完全正确
查rebar3_gpb_plugins字数文件,配置正确,没有有效信息
只好给作者提issues, 正在提的过程中,弹出一个相似的issues,发现已经有人遇到过这个问题了Issues地址
原来作者已经解决了这个问题,但只是一个小的修复,并没有写到文档里面。
然后根据指示修复。
ok.
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。