问题
rebar3因为毕竟是基于英文环境开发的,很多命令匹配都是基于英文返回内容,因此可能部分命令会执行失败
===> Verifying dependencies...
===> Compiling game_fight
===> Assembling release game_fight-0.1.0...
===> Uncaught error in rebar_core. Run with DEBUG=1 to see stacktrace or consult rebar3.crashdump
===> When submitting a bug report, please include the output of `rebar3 report "your command"`
命令行里set DEBUG=1后,可以看到出错内容
===> Uncaught error: {case_clause,"脦陋 ...
===> Stack trace to the error location:
[{rlx_file_utils,win32_make_junction_cmd,2,
command"`
大多数都是因为rebar3和rlx的库里的windows下命令行只考虑英文情况引起的;
Cmd = "cmd /c mklink /j \"" ++ filename:nativename(T) ++ "\" \"" ++ filename:nativename(S) ++ "\"",
case os:cmd(Cmd) of
"Junction created " ++ _ ->
ok;
[] ->
% When mklink fails it prints the error message to stderr which
% is not picked up by os:cmd() hence this case switch is for
% an empty message
cp_r(Source, Target)
end.
解决办法
当然去改rebar3的代码和rlx的代码也能解决问题。但是费力不讨好。
所以这里推荐直接修改命令行的默认语言为英文
修改命令行的文章可以看这里
简单的来说就是修改注册表的 HKEY_CURRENT_USER\Console\CodePage项为437
文章中只有一个没有写到,那就是如果没有找到上面提到的注册表项,就需要手动修改下命令行的配置,生成该项
修改命令行配置,产生注册表项
打开命令行后,右键修改属性中的任意一项(我没全试,就修改了下字体),F5刷新注册表就可以看到表项,修改后,重新打开的命令行都是默认英文的;
再次执行rebar3命令,应该可以顺利执行成功
2020-10-27 更新
rebar3 上我提交了一个pr 已经合并上去了,最新的rebar3 执行 compile的时候至少不会报错了
但是release因为rlx库的问题还是会报错。rlx也提交了pr,暂时还没有合并,将来合并了应该就都支持了

本文介绍了rebar3在中文环境中遇到的部分命令执行失败的问题,以及通过修改命令行默认语言为英文来解决该问题的方法,包括修改注册表项为437,确保rebar3命令能顺利执行。同时,文中提及已向rebar3提交PR并已合并,以解决compile命令的报错,但rlx库的报错问题还在等待PR合并。
4250

被折叠的 条评论
为什么被折叠?



