2013-06-11 2 views
14

Я способен автоматически выполнить задачу перед компиляцией с:SBT применять задачи после Compile

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 автоматически вызывается после завершения компиляции.

Возможно ли это, или я собираюсь сделать что-то не так, чтобы подключиться к встроенной задаче компиляции?

+0

Не могли бы вы объяснить использование? –

+0

@MarkHarrah, Play имеет ограничение, когда обратная маршрутизация javascript для подпроектов может генерироваться только во время выполнения. Мне нужны маршруты, сгенерированные как статические файлы во время компиляции, которые я выполнил, за исключением подключения к задаче в качестве операции после компиляции (т. Е. Мне нужно сначала скомпилировать приложение, иначе новые маршруты не будут учитываться в задаче генерации маршрутов). – virtualeyes

+0

Являются ли эти файлы генерируемыми ресурсами? –

ответ

13

В общем, есть определенная задача, которая зависит от вашей задачи.

Если compile используется для обозначения «скомпилировать и установить вещи для Грунта», а затем создать prepareGrunt задачу, которая зависит от compile и myTask и запустить, что вместо этого.

Если myTask должен работать до того, как классы и ресурсы проекта будут использованы чем-то другим, тогда сделайте его зависимым от exportedProducts. Задачи, такие как run и test, а задачи в зависимых проектах получат экспортированные записи пути к классам из этой задачи.

Опасность в «запуске после компиляции» заключается в том, что myTask не будет запущен перед задачей, которая на самом деле нуждается в ней. Существует метод triggeredBy на Initialize[Task[T]], но его легко злоупотреблять и его следует использовать только тогда, когда, как известно, вывод задачи используется только после выполнения всех задач.

+3

+1 спасибо, Марк, вы делаете невероятную работу со СБТ, держите его (не забудьте спать, хотя ;-)) – virtualeyes

Смежные вопросы