Запуск пользовательской задачи автоматически до/после стандартной задачи
Я часто хочу выполнить некоторую настройку, прежде чем запускать одну из стандартных задач. Я понимаю, что могу выполнять новые задачи, которые выполняют существующие задачи в том порядке, в котором я хочу, но я нахожу, что громоздкость и вероятность того, что разработчик пропустит, что он должен запускать мой компилятор вместо компиляции, большой и приводит к затруднению исправления ошибок.
Итак, я хочу определить пользовательскую задачу (скажем подготовить-приложение) и ввести ее в дерево зависимостей существующих задач (например, package-bin), чтобы каждый раз, когда кто-то вызывает пакет-bin, мои пользовательские задачи запускаются прямо перед ним.
Я пробовал делать это
def mySettings = {
inConfig(Compile)(Seq(prepareAppTask <<= packageBin in Compile map { (pkg: File) =>
// fiddle with the /target folder before package-bin makes it into a jar
})) ++
Seq(name := "my project", version := "1.0")
}
lazy val prepareAppTask = TaskKey[Unit]("prepare-app")
но он не выполняется автоматически package-bin прямо перед тем, как он упаковывает компиляцию в банку. Итак, как мне изменить приведенный выше код для запуска в нужное время?
В более общем плане, где я могу найти информацию о подключении к другим задачам, например компиляции, и существует ли общий способ гарантировать, что ваши собственные задачи выполняются до и после вызова стандартных задач?
Ответы
Ответ 1
Расширение существующей задачи документируется документацией SBT для Tasks (смотрите раздел Изменение существующей задачи).
Что-то вроде этого:
compile in Compile <<= (compile in Compile) map { _ =>
// what you want to happen after compile goes here
}
Собственно, есть другой способ: определить свою задачу, зависящую от компиляции
prepareAppTask := (whatever you want to do) dependsOn compile
а затем изменить packageBin, чтобы зависеть от этого:
packageBin <<= packageBin dependsOn prepareAppTask
(все вышеперечисленные не проверены, но общая нагрузка должна работать, я надеюсь).