mix compile.app
Запись файла .app.
Файл .app — это файл, содержащий Erlang-термы, определяющие ваше приложение. Mix автоматически генерирует этот файл на основе вашей mix.exs конфигурации.
Для генерации файла .app Mix ожидает, что ваш проект содержит ключи :app и :version. Кроме того, вы можете настроить сгенерированное приложение, определив функцию application/0 в вашем mix.exs, которая возвращает список ключевых слов.
Наиболее часто используемые ключи:
:extra_applications— список OTP-приложений, от которых зависит ваше приложение, которые не включены в:deps(обычно определяются вdeps/0в вашемmix.exs). Например, здесь вы можете объявить зависимость от приложений, которые поставляются с Erlang/OTP или Elixir, таких как:cryptoили:logger. Дополнительные необязательные приложения могут быть объявлены как кортеж, например,{:ex_unit, :optional}. Mix гарантирует, что все необязательные приложения будут запущены до запуска вашего приложения.:registered— имя всех зарегистрированных процессов в приложении. Если ваше приложение определяет локальный GenServer с именемMyServer, рекомендуется добавитьMyServerв этот список. Это наиболее полезно для обнаружения конфликтов между приложениями, которые регистрируют одинаковые имена.:env— значения по умолчанию для среды приложения. Среда приложения — один из наиболее распространенных способов конфигурирования приложений. См. модульApplicationдля механизмов чтения и записи в среду приложения.
Например:
def application do
[
extra_applications: [:logger, :crypto, ex_unit: :optional],
env: [key: :value],
registered: [MyServer]
]
end
Другие варианты включают:
:applications— все приложения, от которых зависит ваше приложение во время выполнения. По умолчанию этот список автоматически выводится из ваших зависимостей. Mix и другие инструменты используют список приложений для запуска ваших зависимостей перед запуском самого приложения.:mod— указывает модуль для вызова при запуске приложения. Он должен иметь формат{Mod, args}, где args часто является пустым списком. Указанный модуль должен реализовывать обратные вызовы, определенные модулемApplication.:start_phases— определяет список фаз и их аргументов, которые должны быть вызваны после запуска приложения. См. раздел «Фазы» ниже.:included_applications— определяет список приложений, которые будут включены в приложение. Ответственность за запуск дерева надзора всех включенных приложений лежит на главном приложении, так как будет запущен только главный процесс. Процесс во включённом приложении считает себя принадлежащим главному приложению.:maxT— указывает максимальное время работы приложения в миллисекундах. Приложения останавливаются, если достигается:maxT, и их надзорный процесс завершается с причиной:normal. Этот порог технически допустим в любом файле ресурсов, но он эффективен только для приложений с модулем обратного вызова. По умолчанию:infinity.
Помимо перечисленных выше параметров, файлы .app также ожидают других параметров, таких как :modules и :vsn, но они добавляются автоматически Mix.
Опции командной строки
-
--force— принудительная компиляция независимо от времени модификации -
--compile-path— местоположение файлов.beamи запись результирующего файла.app, по умолчаниюMix.Project.compile_path/0
Фазы
Приложения предоставляют механизм фаз запуска, которые будут вызываться в порядке очередности для приложения и всех включённых приложений. Если фаза не определена для включённого приложения, то это приложение пропускается.
Давайте посмотрим пример функции MyApp.application/0:
def application do
[
start_phases: [init: [], go: [], finish: []],
included_applications: [:my_included_app]
]
end
И пример :my_included_app определяет в своём mix.exs функцию:
def application do
[
mod: {MyIncludedApp, []},
start_phases: [go: []]
]
end
В этом примере порядок вызова обратных вызовов приложения такой:
Application.start(MyApp) MyApp.start(:normal, []) MyApp.start_phase(:init, :normal, []) MyApp.start_phase(:go, :normal, []) MyIncludedApp.start_phase(:go, :normal, []) MyApp.start_phase(:finish, :normal, [])
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/mix/1.12.0/Mix.Tasks.Compile.App.html