是否可以覆盖或修改内置SBT任务(如编译)以依赖我自己的Build.scala中的自定义任务?覆盖,例如直接“编译”是不可能的,因为它已经使用lazy val定义,因此引用super.compile会发出编译器错误“super可能不会用于惰性值”。
答案 0 :(得分:24)
由于在谷歌搜索如何在SBT中添加依赖关系时出现此问题,并且当前答案为deprecated as of 0.13.x并在1.0中删除,因此在此处更新了答案,假设printAction
是compile
应依赖的任务:
(Compile / compile) := ((Compile / compile) dependsOn printAction).value
答案 1 :(得分:18)
更新:请参阅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
}
答案 2 :(得分:7)
回复自我: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)
}
答案 3 :(得分:0)
在base_dir/project/
文件夹中创建文件build.sbt
并将libraryDependencies += ...
放在那里。
这是构建您的&#34;构建项目&#34;的惯用SBT方式,也称为&#34; Meta Build&#34;。