檢視原始碼 app
應用程式資源檔案。
描述
應用程式資源檔案指定應用程式使用的資源,以及應用程式的啟動方式。在系統中,每個應用程式 Application
都必須有一個名為 Application.app
的應用程式資源檔案。
此檔案在應用程式載入/啟動時由應用程式控制器讀取。它也由 systools
中的函式使用,例如在產生啟動腳本時。
檔案語法
應用程式資源檔案應命名為 Application.app
,其中 Application
是應用程式名稱。此檔案應位於應用程式的 ebin
目錄中。
檔案必須包含一個單一的 Erlang 術語,稱為應用程式規格
{application, Application,
[{description, Description},
{id, Id},
{vsn, Vsn},
{modules, Modules},
{maxP, MaxP},
{maxT, MaxT},
{registered, Names},
{included_applications, Apps},
{optional_applications, Apps},
{applications, Apps},
{env, Env},
{mod, Start},
{start_phases, Phases},
{runtime_dependencies, RTDeps}]}.
Value Default
----- -------
Application atom() -
Description string() ""
Id string() ""
Vsn string() ""
Modules [Module] []
MaxP int() infinity
MaxT int() infinity
Names [Name] []
Apps [App] []
Env [{Par,Val}] []
Start {Module,StartArgs} []
Phases [{Phase,PhaseArgs}] undefined
RTDeps [ApplicationVersion] []
Module = Name = App = Par = Phase = atom()
Val = StartArgs = PhaseArgs = term()
ApplicationVersion = string()
Application
- 應用程式名稱。
對於應用程式控制器,所有鍵都是可選的。對於任何省略的鍵,都會使用各自的預設值。
systools
中的函式需要更多資訊。如果使用它們,則以下鍵是強制性的
description
vsn
modules
registered
applications
其他鍵會被 systools
忽略。
description
- 應用程式的單行描述。id
- 產品識別或類似資訊。vsn
- 應用程式的版本。modules
- 此應用程式引入的所有模組。systools
在產生啟動腳本和 tar 檔案時會使用此清單。一個模組只能在一個應用程式中定義。maxP
- 已棄用 - 將被忽略應用程式中允許的最大處理程序數量。
maxT
- 應用程式允許執行的最大時間(以毫秒為單位)。經過指定的時間後,應用程式會自動終止。registered
- 此應用程式中啟動的所有已註冊處理程序的名稱。systools
使用此清單來檢測不同應用程式之間的名稱衝突。included_applications
- 此應用程式包含的所有應用程式。當此應用程式啟動時,應用程式控制器會自動載入所有包含的應用程式,但不會啟動它們。假設包含的應用程式的最上層監管者由此應用程式的監管者啟動。applications
- 必須在此應用程式之前啟動的所有應用程式。如果某個應用程式也列在optional_applications
中,則該應用程式並非必須存在(但如果存在,則保證也會在此應用程式之前啟動)。systools
使用此清單來產生正確的啟動腳本。預設為空清單,但請注意,所有應用程式都依賴(至少)核心和 STDLIB。optional_applications
- 可選的applications
清單。請注意,如果希望可選的依賴項在可用時始終自動在當前應用程式之前啟動,則必須同時列在applications
和optional_applications
中。env
- 應用程式使用的組態參數。組態參數的值可透過呼叫application:get_env/1,2
來擷取。應用程式資源檔案中的值可以被組態檔案中的值覆蓋(請參閱config(4)
)或被命令列標誌覆蓋(請參閱erts:erl(1)
)。mod
- 指定應用程式回呼模組和啟動引數,請參閱application
。對於實作為監管樹的應用程式,鍵
mod
是必要的,否則應用程式控制器不知道如何啟動它。對於沒有處理程序的應用程式(通常是程式碼庫,例如 STDLIB),可以省略mod
。start_phases
- 應用程式的啟動階段清單和對應的啟動引數。如果存在此鍵,則應用程式主程序除了通常呼叫Module:start/2
之外,還會針對鍵start_phases
定義的每個啟動階段呼叫Module:start_phase(Phase,Type,PhaseArgs)
。只有在此擴展的啟動程序之後,application:start(Application)
才會傳回。啟動階段可用於同步應用程式及其包含的應用程式的啟動。在這種情況下,鍵
mod
必須如下指定{mod, {application_starter,[Module,StartArgs]}}
然後,應用程式主程序會針對主要應用程式呼叫
Module:start/2
,然後針對每個啟動階段(如為主要應用程式定義)呼叫Module:start_phase/3
,包括主要應用程式及其每個已定義啟動階段的包含應用程式。這表示對於包含的應用程式,啟動階段的集合必須是為主要應用程式定義的階段集合的子集。如需詳細資訊,請參閱 OTP 設計原則。
runtime_dependencies
- 應用程式依賴的應用程式版本清單。此類應用程式版本的範例為"kernel-3.0"
。指定為執行階段依賴項的應用程式版本是最低要求。也就是說,比依賴項中指定的版本更大的應用程式版本符合要求。有關如何比較應用程式版本的資訊,請參閱系統原則使用者指南中的 版本 一節。請注意,應用程式版本指定了原始碼版本。一個更間接的要求是,已安裝的指定版本二進位應用程式的建置方式必須與系統的其餘部分相容。
某些依賴項可能僅在特定的執行階段情境中才需要。當存在此類可選的依賴項時,會在特定應用程式的對應「App」文件中指定並說明這些依賴項。