檢視原始碼 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 清單。請注意,如果希望可選的依賴項在可用時始終自動在當前應用程式之前啟動,則必須同時列在 applicationsoptional_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」文件中指定並說明這些依賴項。

另請參閱

application, systools