Подтвердить что ты не робот

Добавление новых зависимостей задач к встроенным задачам SBT?

Можно ли переопределить или изменить встроенные задачи SBT (например, компиляцию), чтобы зависеть от пользовательских задач в моей собственной Build.scala? Переопределение, например. "компилировать" напрямую невозможно, так как он был определен с ленивым значением val и, таким образом, ссылаясь на super.compile, испускает ошибку компилятора "супер не может использоваться для ленивого значения".

4b9b3361

Ответ 1

Поскольку этот вопрос появляется, когда Googling добавляет зависимость в SBT, а текущие ответы устарели от 0.13.x и удалены в 1.0, здесь обновленный ответ, предполагая, что printAction - это задача, на которую compile должна зависеть:

(Compile / compile) := ((Compile / compile) dependsOn printAction).value

Ответ 2

Обновление: см. ответ arussell84 для современного способа сделать это

Вы должны сделать это следующим образом:

в файле .sbt:

compile <<= (compile in Compile) dependsOn jruby

Где jruby - это ключ задачи, который вы определили в файле project/something.scala:

val jruby = TaskKey[Unit]("jruby", "run a jruby file")

Кроме того, это не часть вашего вопроса, но вы можете просто вызвать обычный Scala код:

compile <<= (compile in Compile) map { result =>
  println("in compile, something")
  result
}

Ответ 3

Ответ на вопрос: http://code.google.com/p/simple-build-tool/wiki/ProjectDefinitionExamples#Insert_Task_Dependency сообщает ответ:

Если вы используете более старые версии 0.7.x SBT, вы можете сделать это:

import sbt._
class SampleProject(info: ProjectInfo) extends DefaultProject(info) {
  lazy val printAction = task { print("Testing...") }
  override def compileAction = super.compileAction dependsOn(printAction)
}

Ответ 4

В папке base_dir/project/ создайте файл build.sbt и поместите там libraryDependencies += ....

Это идиоматический способ SBT для создания вашего "проекта сборки", также известного как "Meta Build".