Ошибка 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> НЕ является частью моего выпуска (ни прямо, ни косвенно). На самом деле не могу понять, что <system_app> не будет включен в мой релиз? Вот почему это "potentially included"?

В любом случае, чтобы сгенерировать релиз, я должен либо явно исключить <system_app> с помощью {app, <system_app> [{incl_cond, exclude}]} что ужасно с тех пор <system_app> просто случается быть установленным в root_dir системы Erlang/OTP машины, на которой я выполняю сборку (она может быть не установлена ​​на других машинах сборки) и не имеет никакого отношения к моей версии. Фактический пример: Цунг-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 устанавливает себя.

Другие вопросы по тегам