我有一个OTP应用程序。该应用程序的版本位于以下两个位置:src/application_name.src文件(OTP应用程序的标准文件)和我的rebar.config。
应用程序是否有“官方”方式获取自己的版本,或者是否需要通过sed / grep等进行黑客入侵?我想在我的应用程序中使用一个“信息”端点来打印自己的版本。当然,我总是可以从rebar.config中执行grep之类的操作,但是似乎很hack。
根据Erlang文档,您可以使用应用程序模块的API 。
例:
Erlang/OTP 19 [erts-8.2.2] [source-1ca84a4] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V8.2.2 (abort with ^G)
1> application:loaded_applications().
[{stdlib,"ERTS CXC 138 10","3.2"},
{kernel,"ERTS CXC 138 10","5.1.1"}]
2> GetVer =
fun(App) ->
case lists:keyfind(App, 1, application:loaded_applications()) of
{_, _, Ver} ->
Ver;
false ->
not_found
end
end.
#Fun<erl_eval.6.52032458>
3> GetVer(stdlib).
"3.2"
4> GetVer(eunit).
not_found
5> application:load(eunit).
ok
6> GetVer(eunit).
"2.3.2"
7>
Run Code Online (Sandbox Code Playgroud)