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

agi*_*eel 17 scala sbt

我在SBT(0.12.2)项目中有自定义任务.让我们给他们打电话a,bc.因此,当我处于SBT的交互模式时,我只需键入a并执行与之关联的任务a.我也可以打字;a;b;c,三个任务按顺序执行; 就像;clean;compile会做的那样.我还可以从交互式shell中创建一个别名来运行它们:alias all=;a;b;c.现在,当我输入all任务时,以明显的方式执行.我想要实现的是在我的项目的SBT配置中创建这个别名.

SBT文档的这一部分涉及任务,但我能实现的是这样的:

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
)
Run Code Online (Sandbox Code Playgroud)

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

lim*_*ime 31

我一直在寻找相同的东西,并发现这个请求一个简单的别名方法和提供一个提交:addCommandAlias.

在我build.sbt现在我有:

addCommandAlias("go", ";container:start;~copy-resources")
Run Code Online (Sandbox Code Playgroud)

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


agi*_*eel 9

我弄清楚了:

lazy val taskSettings = Seq(
    all <<= c dependsOn (b dependsOn a)
)
Run Code Online (Sandbox Code Playgroud)


rog*_*one 9

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

alias all=;a;b;c
Run Code Online (Sandbox Code Playgroud)

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