Ошибка 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 устанавливает себя.