查看源代码 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
- 此应用程序包含的所有应用程序。 当此应用程序启动时,所有包含的应用程序都会被应用程序控制器自动加载,但不会启动。 假设包含的应用程序的顶层 supervisor 由此应用程序的 supervisor 启动。applications
- 必须在此应用程序之前启动的所有应用程序。 如果一个应用程序也列在optional_applications
中,则该应用程序不是必须存在的(但如果存在,则保证它也会在此应用程序之前启动)。systools
使用此列表来生成正确的启动脚本。 默认为空列表,但请注意,所有应用程序都依赖于(至少)Kernel 和 STDLIB。optional_applications
- 可选的applications
列表。 请注意,如果您希望在可选依赖项可用时始终在其之前自动启动当前应用程序,则它必须同时列在applications
和optional_applications
中。env
- 应用程序使用的配置参数。 配置参数的值通过调用application:get_env/1,2
检索。 应用程序资源文件中的值可以被配置文件(请参阅config(4)
)或命令行标志(请参阅erts:erl(1)
)中的值覆盖。mod
- 指定应用程序回调模块和启动参数,请参阅application
。对于实现为 supervisor 树的应用程序,键
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”文档中指定和记录这些依赖项。