我想知道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
错误?
bad argument
。
答案 0 :(得分:1)
我相信您会看到错误消息,因为在包含应用程序的{include_cond,derived}策略的情况下,reltool使用erlang的lib目录作为erlang库的规范来源。 Tsung仅将其安装到系统库目录中的事实污染了它,现在不允许任何其他应用程序将mochijson2模块作为发布的一部分包含在内。
我不会把它称为reltool中的错误,而是tsung安装自己的错误。