2012-06-08 4 views
6

я задавался вопросом, что стало причиной следующего поведения reltool:Reltool ошибка «потенциально включены два разных приложения»

Если мой reltool.config использует по умолчанию mod_cond и incl_cond опции, а также один из моих включенных приложений имеет модуль который также случается быть частью какого-либо приложения, установленного на моей машине, но не включенный в моем релиз reltool:get_target_spec/1 возвращений:

{error, "Module <some_module> potentially included by two different applications: <system_app> and <my_app>."}

Что раздражает, поскольку <system_app> НЕ является частью моего выпуска (прямо или косвенно). Не может ли reltool фактически выяснить, что <system_app> не будет включен в мой выпуск? Вот почему это "potentially included"?

Во всяком случае, для того, чтобы генерировать мое освобождение я должен либо явно исключить <system_app> через {app, <system_app> [{incl_cond, exclude}]} что некрасиво, так как это <system_app> просто случается быть установлена ​​в root_dir системы Erlang/OTP машины, где я делаю сборки (он не может быть установлен на других машинах сборки) и не имеет никакого отношения к моему выпуску. Фактический пример: tsung-1.4.3 включает в себя модуль mochijson2, поэтому у меня возникла проблема с созданием моего собственного релиза, который должен содержать приложение mochiweb на машине с установленным tsung (но не на других машинах). Другим вариантом было бы изменить верхний уровень incl_cond от {incl_cond, derived} до {incl_cond, exclude}, а затем вручную включить все приложение, которое я хочу быть частью моей версии, которая лучше (будет работать на любой машине сборки), но все равно не так велика, поскольку она должна быть выполняется вручную (я хочу полагаться на relltool, чтобы выяснить зависимости).

Итак, вопрос в том, почему у нас такая ситуация? Почему просто наличие какого-либо приложения на строительной машине приводит к вышеуказанной ошибке reltool?

PS В качестве боковой заметки я считаю, что в строке 907-909 текущей версии reltool_server.erl содержится ошибка: она будет генерировать bad argument, если она когда-либо будет вызвана.

ответ

1

Я считаю, что вы видите сообщение об ошибке, потому что в случае {include_cond, производной} политики для включения приложений reltool использует каталог lib erlang как канонический источник библиотек erlang. Tsung по факту его установки в каталог системной библиотеки загрязнил его и теперь не позволяет другим приложениям включать модуль mochijson2 в качестве части выпуска.

Я бы не назвал это ошибкой в ​​reltool, скорее это ошибка в том, как tsung устанавливает себя.

Смежные вопросы