我的erlang应用程序名为" myapp1 "只要我不包含另一个erlang应用程序" my_other_app "在其依赖(deps)下。一旦我将它添加到我的依赖项中,并在rebar.config下指定它,它的构建就会因为错误而失败:
> rebar compile
Uncaught error in rebar_core: {'EXIT',
{badarg,
[{re,run,[0.9,".*",[{capture,none}]],[]},
{rebar_deps,is_app_available,5,
[{file,"src/rebar_deps.erl"},{line,418}]},
{rebar_deps,find_dep_in_dir,3,
[{file,"src/rebar_deps.erl"},{line,380}]},
{rebar_deps,find_dep,3,
[{file,"src/rebar_deps.erl"},{line,362}]},
{rebar_deps,find_deps,4,
[{file,"src/rebar_deps.erl"},{line,345}]},
{rebar_deps,preprocess,2,
[{file,"src/rebar_deps.erl"},{line,63}]},
{rebar_core,acc_modules,5,
[{file,"src/rebar_core.erl"},{line,492}]},
{rebar_core,process_dir1,6,
[{file,"src/rebar_core.erl"},{line,195}]}]}}
rebar.config是
%%-*- mode: erlang -*-
{deps, [
{webmachine, "1.10.*", {git, "git://github.com/basho/webmachine", "HEAD"}},
amqp_client,
rabbit_common,
my_other_app
]
}.
树结构是这样的:
myapp1
-src/...
-ebin/...
-rebar.config
-deps/
-webmachine
-mochiweb
-my_other_app
-src/...
-ebin/...
-include/...
至于我从rebar.config中删除my_other_app,一切正常(除了应用程序不起作用,因为我排除了所需的depdency,但至少在我评论使用该依赖项的代码后编译)
我想了解" is_app_available "函数在rebar中起作用,因为我的my_other_app确实是一个OTP应用程序,但它在我用rebar编译时没有启动(一旦某些服务启动它将由myapp1本身启动。
答案 0 :(得分:1)
看起来您的某个应用程序的版本可能是原子0.9
,而不是字符串"0.9"
。 re
模块需要iodata()
表示该参数。尝试找出哪个应用程序并将atom更改为字符串。
答案 1 :(得分:0)
发现问题......
依赖项应用程序的 my_other_app.app.src 文件的Vsn(版本)不是字符串(而是数值)。这导致螺纹钢出错。当然,螺纹钢可以有更友好的捕获/错误信息......
因此,请务必验证{ vsn ," 1.1"}标记,以便它具有字符串而非十进制/数字。
{application, my_other_app, [
{description, "my other appapplication"},
{vsn, "1.1"},
{applications, [kernel, stdlib]},
{modules, [.........etc.etc.etc......]},
{registered, [my_other_app]},
{mod,{ my_other_app, {true} } }
]}.