在嘗試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的實質性意義是什嗎??
求解答。。