В моем приложении структура 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).
и т. Д.
rebar compile работает отлично и генерирует соответствующее дерево подкаталогов в 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.
Спасибо.