2011-09-08 103 views
22

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

+0

SBT 0.13的可能重复http://stackoverflow.com/q/8554992/1305344 –

回答

5

由于谷歌搜索如何添加一个依赖于SBT,而目前的答案是deprecated as of 0.13.x并删除在1.0时,会出现这个问题,这里是更新后的答案,假设printActioncompile应取决于任务:

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

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) 
} 
+4

请注意,此建议仅适用于'较旧'的SBT 0.7.x.目前的0.11是不同的。 –

+3

新版本如何做到这一点? – Hadesara

+1

此答案已过时。请参阅[我刚刚发布的更新版本](https://stackoverflow.com/a/47654822/596329)。 – arussell84

17

更新:见arussell84的答案了现代的方式执行此

你应该能够做到这一点是这样的:

在名.bst文件:

compile <<= (compile in Compile) dependsOn jruby 

哪里JRuby是你已经在项目/ something.scala文件中定义的任务关键:

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

而且,这不是你的问题的一部分,但你可以经常打电话Scala代码:

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

在那里有很多'编译',我无法弄清楚这是如何扩展到向其他任务添加依赖关系的。我该如何添加依赖到'舞台'? –

+0

@ScottMorrison我想你说:'舞台<<舞台依赖于jruby' – 0fnt

+2

这个答案已经过时。请参阅[我刚刚发布的更新版本](https://stackoverflow.com/a/47654822/596329)。 – arussell84

0

base_dir/project/文件夹中创建一个文件build.sbt,把libraryDependencies += ...那里。

这就是建立“构建项目”(也称为“元构建”)的惯用SBT方式。