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