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.11.2/Mix.Tasks.Compile.App.html