如何在发布时使ebin中的rebar / reltool尊重子目录?

时间:2011-11-14 17:42:34

标签: erlang otp rebar

在我的应用中,我的dir结构接近以下内容:

src/
  api/
    server.erl
    model.erl
  common/
    common_stuff.erl
    util.erl
  some_app.erl
  some_server.erl
  something_else.erl
  some_app.app.src

驻留在子目录(common,api等)中的文件以通常的包样式命名。 例如,src / common / util.erl声明为:

-module(common.util).

src / api / server.erl声明为:

-module(api.server).

等等。

钢筋编译完美无缺,并在ebin中生成适当的子树:

ebin/
  api/
    server.beam
    model.beam
  common/
    common_stuff.beam
    util.beam
  some_app.beam
  some_server.beam
  something_else.beam
  some_app.app

但是,rebar只生成顶级文件复制到rel目录:

rel/some_app/lib/some_app-0.0.2/ebin/
  some_app.beam
  some_server.beam
  something_else.beam
  some_app.app

驻留在子目录中的所有内容都不会复制到发布中。因此,当我尝试启动生成的版本时,我立即收到此类错误消息:

{"init terminating in do_boot",{'cannot load','api.server',get_files}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()

我的钢筋生成的ebin / some_app.app确实列出了所有必需的模块:

{application,some_app,
             [{description,"0.0.2"},
              {vsn,"0.0.2"},
              {registered,[]},
              {applications,[kernel,stdlib,sasl]},
              {mod,{some_app,[]}},
              {env,[]},
              {modules,['api.server','api.model','common.common_stuff',
                        'common.util', some_app, some_server,
                        something_else]}]}.

有谁知道如何让“钢筋生成”尊重ebin的子目录?我相信这也可能是reltool的问题。

感谢。

1 个答案:

答案 0 :(得分:3)

erlang·

仅支持平面应用程序结构

“套装自5年前推出以来一直是一个实验性功能。使用它需要您自担风险,我们不会主动维护和开发此功能。但有一天可能会支持它。

尽管这些软件包工作得很好,但是工具和其他部件中存在一些已知的问题,其中软件包无法正常运行。“

http://www.erlang.org/doc/man/packages.html