SBT применить задачу после компиляции
Я могу автоматически выполнить задачу перед компиляцией с:
compile in Compile <<= (compile in Compile).dependsOn(myTask)
Как мне сделать то же самое, но после компиляции?
Я знаю, что могу сделать:
compile in Compile <<= (compile in Compile) map{x=>
// post-compile work
doFoo()
x
}
выполнить произвольный код Scala, но мне нужно автоматически выполнить само целевое задание, когда происходит событие компиляции
Делать что-то вроде:
val foo = TaskKey[Unit]("foo", "...")
val fooTask = foo <<= scalaInstance map {si =>
...
} dependsOn(compile in Compile)
работает, если я наберу "foo" из sbt> prompt; т.е. задача выполняется после компиляции, но цель состоит в том, чтобы подключиться к самой задаче компиляции, поэтому каждый раз, когда происходит компиляция, задача foo автоматически вызывается после завершения компиляции.
Возможно ли это, или я иду неправильно, чтобы подключиться к встроенной задаче компиляции?
1 ответ
В общем, есть какая-то задача, которая зависит от вашей задачи.
Если compile
используется для обозначения "скомпилировать и настроить Grunt", а затем создать prepareGrunt
задача, которая зависит от compile
а также myTask
и запустите это вместо.
Если myTask
должен выполняться до того, как классы и ресурсы проекта будут использоваться чем-то другим, а затем сделать его зависимым от exportedProducts
, Задачи как run
а также test
и задачи в зависимых проектах получат экспортированные записи пути к классам из этой задачи.
Опасность в "запустить некоторое время после компиляции" заключается в том, что myTask
не будет запущен до задачи, которая действительно нуждается в этом. Здесь triggeredBy
метод на Initialize[Task[T]]
, но им легко злоупотреблять, и его следует использовать только тогда, когда известно, что выходные данные задачи используются только после выполнения всех задач.