Rebar无法在is_app_available上使用badarg编译应用程序

时间:2014-04-13 19:41:52

标签: erlang rebar

我的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本身启动。

2 个答案:

答案 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} } }
]}.