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

时间:2011-09-08 07:17:02

标签: scala sbt

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

4 个答案:

答案 0 :(得分:24)

由于在谷歌搜索如何在SBT中添加依赖关系时出现此问题,并且当前答案为deprecated as of 0.13.x并在1.0中删除,因此在此处更新了答案,假设printActioncompile应依赖的任务:

(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;。