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]], но им легко злоупотреблять, и его следует использовать только тогда, когда известно, что выходные данные задачи используются только после выполнения всех задач.

Другие вопросы по тегам