我想知道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 作为旁注,我相信当前版本的reltool_server.erl的第 907-909 行包含一个错误:它会bad argument
在被调用时生成。