Erlang:以编程方式获取应用程序版本

Tom*_*mmy 3 erlang

我有一个OTP应用程序。该应用程序的版本位于以下两个位置:src/application_name.src文件(OTP应用程序的标准文件)和我的rebar.config。

应用程序是否有“官方”方式获取自己的版本,或者是否需要通过sed / grep等进行黑客入侵?我想在我的应用程序中使用一个“信息”端点来打印自己的版本。当然,我总是可以从rebar.config中执行grep之类的操作,但是似乎很hack。

Pou*_*iya 5

根据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)