将新任务依赖项添加到内置SBT任务中?

Eem*_*ola 27 scala sbt

是否可以覆盖或修改内置SBT任务(如编译)以依赖我自己的Build.scala中的自定义任务?重写例如直接"编译"是不可能的,因为它已经用lazy val定义,因此引用super.compile会发出编译器错误"super可能不会用于惰性值".

aru*_*l84 24

由于在谷歌搜索如何在SBT中添加依赖关系时出现此问题,并且当前的答案从0.13.x弃用并在1.0中删除,这里是更新的答案,假设这printActioncompile应该依赖的任务:

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


Jam*_*ore 18

更新:请参阅arussell84的答案以获得现代化的方法

你应该能够这样做:

在.sbt文件中:

compile <<= (compile in Compile) dependsOn jruby
Run Code Online (Sandbox Code Playgroud)

其中jruby是您在project/something.scala文件中定义的任务键:

val jruby = TaskKey[Unit]("jruby", "run a jruby file")
Run Code Online (Sandbox Code Playgroud)

此外,这不是您的问题的一部分,但您可以只调用常规的Scala代码:

compile <<= (compile in Compile) map { result =>
  println("in compile, something")
  result
}
Run Code Online (Sandbox Code Playgroud)

  • 那里有很多'编译',我无法弄清楚如何将依赖性添加到其他任务.如何为"舞台"添加依赖项? (6认同)
  • 这个答案已经过时了.请参阅[我刚发布的更新版本](/sf/answers/3335837571/). (2认同)

Eem*_*ola 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)
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此建议仅适用于"较旧"的SBT 0.7.x. 目前0.11的表现不同. (4认同)
  • 新版本如何做到这一点? (3认同)