如何为一系列任务添加别名?

时间:2013-04-25 08:17:50

标签: scala sbt

我的SBT(0.12.2)项目中有自定义任务。我们称他们为abc。因此,当我处于SBT的交互模式时,我只需键入a,即可执行与a相关的任务。我也可以输入;a;b;c,三个任务按顺序执行;和;clean;compile之类的东西一样。我还可以从交互式shell中创建一个别名来运行它们:alias all=;a;b;c。现在当我输入all时,任务以明显的方式执行。我想要实现的是在我的项目的SBT配置中创建这个别名。

SBT文档中的This section处理任务,但我能做到的就是这样:

lazy val a = TaskKey[Unit]("a", "does a")
lazy val b = TaskKey[Unit]("b", "does b")
lazy val c = TaskKey[Unit]("c", "does c")
lazy val all = TaskKey[Unit]("all", ";a;b;c")

lazy val taskSettings = Seq(
    all <<= Seq(a,b,c).dependOn
)

我对这种方法的问题是任务是组合,因此它们的执行是顺序发生的,与顺序相反,这正是我想要实现的。那么如何在SBT配置文件中创建alias all=;a;b;c之类的别名?

3 个答案:

答案 0 :(得分:30)

我一直在寻找相同的东西,并找到了this request以便轻松获得别名,the commit提供了一个:addCommandAlias

build.sbt我现在有:

addCommandAlias("go", ";container:start;~copy-resources")

正如您可能猜到的那样,在控制台中编写go现在将为我运行更长的命令序列。

答案 1 :(得分:9)

我已经明白了:

lazy val taskSettings = Seq(
    all <<= c dependsOn (b dependsOn a)
)

答案 2 :(得分:9)

另一种实现此目的的方法是在.sbtrc文件中定义一个别名,该文件位于项目目录的根目录中。

alias all=;a;b;c

您还可以选择在主目录中定义这些.sbtrc文件,在这种情况下,此别名将可供您的所有项目使用。