SBT在所有子项目之后运行任务
我想编写一个在所有子项目任务完成后运行的任务 如果我这样做了SBT在所有子项目之后运行任务,sbt,Sbt,我想编写一个在所有子项目任务完成后运行的任务 如果我这样做了 sbt a b然后在所有子项目上完成任务a后,我要执行任务b。我不想在每个项目上都做(a b) 可能吗 事实上,我会直接修改build.sbt。我不必在命令行中指定它。我写了一篇关于这个主题的博文: addCommandAlias 这里有一个例子。我们将在sub1和sub2中定义自定义任务a,在root中定义b。实现顺序执行的最简单方法是使用addCommandAlias,所以我们就这样做 lazy val a=taskKey[Uni
sbt a b
然后在所有子项目上完成任务a后,我要执行任务b。我不想在每个项目上都做(a b)
可能吗
事实上,我会直接修改build.sbt。我不必在命令行中指定它。我写了一篇关于这个主题的博文: addCommandAlias 这里有一个例子。我们将在sub1和sub2中定义自定义任务
a
,在root中定义b
。实现顺序执行的最简单方法是使用addCommandAlias
,所以我们就这样做
lazy val a=taskKey[Unit](“a”)
惰性值b=任务键[单位](“b”)
lazy val root=(文件中的项目(“.”)。
骨料(sub1、sub2)。
设置(addCommandAlias(“ab”,“a;b”):*)。
背景(
b:={
println(“b”)
}
)
lazy val sub1=(文件中的项目(“sub1”))。
设置(a:=println(“a-sub1”))
lazy val sub2=(文件中的项目(“sub2”))。
设置(a:=println(“a-sub2”))
您可以在shell中以sbt ab
的形式运行此命令
$ sbt ab
[info] Loading global plugins from ...
[info] Loading project definition from ...
[info] Set current project to root (in build ...)
a - sub2
a - sub1
[success] Total time: 0 s, completed Nov 22, 2014 8:36:18 PM
b
[success] Total time: 0 s, completed Nov 22, 2014 8:36:18 PM
$ sbt b
[info] Loading global plugins from ...
[info] Loading project definition from ...
[info] Set current project to root (in build ...)
a,b
[success] Total time: 0 s, completed Nov 23, 2014 9:42:16 PM
Def.taskDyn
这是另一个例子。这次使用的是Def.taskDyn
,这也是博客文章的特色。
我正在从聚合
构建一个ScopeFilter
,然后将任务a
分派给他们
lazy val a=taskKey[File](“a”)
lazy val b=taskKey[Seq[File]](“b”)
lazy val root=(文件中的项目(“.”)。
骨料(sub1、sub2)。
背景(
b:=(定义为taskDyn){
val proj=thisProject.value
val filter=ScopeFilter(在项目中(项目聚合:*))
定义任务{
val allValues=a.all(过滤器).value
println(allValues.mkString(“,”))
所有价值观
}
}).价值
)
lazy val sub1=(文件中的项目(“sub1”))。
设置(a:=新文件(“a”))
lazy val sub2=(文件中的项目(“sub2”))。
设置(a:=新文件(“b”))
您可以在shell中以sbt b
的形式运行此命令
$ sbt b
[info] Loading global plugins from ...
[info] Loading project definition from ...
[info] Set current project to root (in build ...)
a,b
[success] Total time: 0 s, completed Nov 23, 2014 9:42:16 PM
我以前读过这篇文章(它真的很好),但它不是关于项目中的顺序排序吗?我希望任务B在任务A对所有主题执行之后执行。因为没有为子项目定义B,所以这个方法有效吗?我之所以问这个问题,是因为我想在所有其他任务之后运行的任务是由插件添加的任务。基本上,我有一个报告任务,然后在为所有子项目运行报告后,我想运行一个报告聚合任务。我不能在每个项目之后单独运行它,因为我们需要首先生成所有报告。您需要的可能是
ScopeFilter
()。添加了一个从当前项目的聚合创建一个的示例。对我来说,thisProject.value
、ScopeFilter(inprojects(…)
)和.all(filter).value
的组合是关键。我不知道有一个。所有的丰富!我建议你接受横田由纪子的回答。