Может ли sbt выполнить "компилировать тест: скомпилировать его: скомпилировать" как одну команду, скажем "*: компилировать"?

Я запускаю compile test:compile it:compile довольно часто и... хотел бы сократить количество нажатий клавиш на что-то вроде *:compile. Однако это не работает.

$ sbt *:compile
[info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins
[info] Loading project definition from /Users/jacek/oss/scalania/project
[info] Set current project to scalania (in build file:/Users/jacek/oss/scalania/)
[error] No such setting/task
[error] *:compile
[error]          ^

Возможно ли вообще? Я использую SBT 0.13.

Ответ 1

test:compile подразумевает compile, поэтому compile не нужно явно запускать до test:compile. Если ваша конфигурация IntegrationTest extend Test, it:compile подразумевает test:compile.

Один из вариантов - определить псевдоним, который выполняет несколько команд:

sbt> alias compileAll = ; test:compile ; it:compile

Подробнее см. help alias и help ;. Вы можете сделать это частью своей сборки с помощью:

addCommandAlias("compileAll", "; test:compile ; it:compile")

Другим вариантом является определение настраиваемой задачи, которая зависит от других, и вызывает это:

lazy val compileAll = taskKey[Unit]("Compiles sources in all configurations.")

compileAll := { 
   val a = (compile in Test).value
   val b = (compile in IntegrationTest).value
   ()
}