В 2019 году мы используем rebar3
до , создаем приложение и управляем его зависимостями.Для зависимостей, которые необходимо загрузить, вы добавляете их в rebar.config
, и rebar3
загружает зависимости.Например, если вы добавите hackney
(http-клиент) в rebar.config:
{erl_opts, [debug_info]}.
{deps, [
{hackney, ".*", {git, "git://github.com/benoitc/hackney.git", {branch, "master"}}}
]}.
{shell, [
% {config, "config/sys.config"},
{apps, [http_client]}
]}.
, то:
../your_app_name$ rebar3 compile
rebar3
загрузит hackney
и скомпилируетвсе файлы в application
.
Чтобы убедиться, что все ваши зависимости запускаются перед вашим приложением, вы добавляете имена зависимостей в:
src/your_app_name.app.src
Например,
{application, http_client,
[{description, "An OTP application"},
{vsn, "0.1.0"},
{registered, []},
{mod, {http_client_app, []}},
{applications,
[kernel,
stdlib,
hackney %%%<=========HERE
]},
{env,[]},
{modules, []},
{licenses, ["Apache 2.0"]},
{links, []}
]}.
здесь создается настоящий файл .app:
_build/default/lib/your_app_name/ebin/your_app_name.app
Чтобы запустить ваше приложение в оболочке вместе со всеми его зависимостями, вы:
../your_app_name$ rebar3 shell
Приложение inets
поставляется с erlangпоэтому его не нужно загружать, поэтому вы не указываете inets как зависимость в rebar.config (вы получите сообщение об ошибке, когда вы $ rebar3 compile
).Вам по-прежнему нужно указывать inets как зависимость в вашем application
в файле:
src/your_app_name.app.src
Но rebar3
сам использует inets
(для загрузки ваших зависимостей), так что даже если вы этого не сделалиукажите inets
в качестве зависимости в вашем приложении, inets
все равно будет запущено до вашего приложения.Вы можете проверить это, не указав inets
в качестве зависимости в вашем application
, а затем выполнив:
$ rebar3 shell
...
...
1> application:start(inets)
{error,{already_started,inets}}
Но не полагайтесь на это и НЕ указывайте inets
в качестве зависимости в вашемприменение.