[Erlang 学习笔记]关于 erlang application 的一些疑问

在尝试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的实质性意义是什么??

求解答。。


你可能感兴趣的:([Erlang 学习笔记]关于 erlang application 的一些疑问)