我想知道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在被调用时生成。