我从未真正将.app
文件用于我的项目。我理解通过application
模块加载应用程序需要这些。
是否有另外使用此类文件?
答案 0 :(得分:11)
* .app和* .rel文件用于生成启动脚本。启动erlang时,启动脚本用于自动启动我的应用程序。应用程序资源文件描述了在启动应用程序之前需要运行的应用程序。例如,如果我使用mnesia并在我的应用程序的.app文件中指明,当我生成启动脚本并使用它来启动我的应用程序时,它将在启动我自己的应用程序时为我启动mnesia。
虽然您可以使用其他软件包管理器进行自动依赖项安装/处理,但启动脚本对于管理应用程序启动时的依赖关系非常有用,这在OTP应用程序设置中非常重要。
注意:otp中的应用程序是指一组正在运行的进程和/或代码。应用程序可以通过多种方式依赖于其他应用程序。他们要么安装代码,要么运行应用程序。
答案 1 :(得分:8)
它们用于构建版本时(使用* .rel生成启动脚本)。我建议只从* .app文件和应用程序行为回调开始。至于从OTP开始。这是一个很好的开发中心:
-module(foo).
-export([start/0]).
start() ->
[application:start(A) || A <- [sasl, inets, x, y, etc]].
使用简单的
启动您依赖于运行应用程序的所有应用程序$ erl -s foo
-mnesia dir '"/some/path"'
传递给erl时,mnesia应用程序将其作为application:get_env(mnesia, dir)
进行访问。如果您定义名为foo
的应用程序,则可以将-foo key 'some-Erlang-literal'
传递给erl。 * .app文件可以包含env
部分中的默认值,* .rel文件会覆盖它们,命令行会覆盖它们。我不太了解的Erlang应用程序的一些其他功能:
最终,您将开始希望以更结构化的方式启动应用程序集,这就是整个发布/启动脚本变得更容易理解的时候。或者相反,你会认为这对你的具体需求来说太过分了。刚开始使用一个简单的* .app和一个带有应用程序行为回调的模块。你不会回头。