在尝试application的发布时,有些不解的地方,求解 ->
官方文档用例
ch_app.app
{application, ch_app, [{description, "Channel allocator"}, {vsn, "1"},{modules, [ch_app, ch_sup, ch3]},{registered, [ch3]},{applications, [kernel, stdlib, sasl]},{mod, {ch_app,[]}}]}. ch_app.erl-module(ch_app). -behaviour(application). -export([start/2, stop/1]). start(_Type, _Args) -> ch_sup:start_link(). stop(_State) -> ok.
一开始认为把模块打包成应用进行发布,是可以通过application:start(AppName).来回调每模块的start()方法来启动各模块,从而启动应用。正如.app文件的option选项
{modules, [ch_app, ch_sup, ch3]},
当启动了application:start(ch_app)之后,回调到ch_app:start() 和 ch_sup:start()。
但可惜的是,实际上不是这样的,
modules这个配置只是说明了application包括了那些模块,不是上面所想的作用,这样我就觉得application的存在还有意义吗?疑惑了- -
我直接用ch_app:start(_,_).来启动都可以了
看看官方文档里面,对modules的解析是这样的:
modules 由该应用引入的所有模块。当生成启动脚本和tar文件时, systools 将用到这个列表。一个模块必须被定义于且仅 于一个应用。默认为[]。
从这里可以知道,modules这个列表一方面标记某模块属于此应用,另一方面当使用systools:make_tar(_Name)或systools:make_tar(_Name,[Option])的时候此列表将作为参数传入。
那样我对.app文件的作用就有疑惑了。。。。
application的实质性意义是什么??
求解答。。