Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SBT在所有子项目之后运行任务_Sbt - Fatal编程技术网

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
的组合是关键。我不知道有一个
。所有的
丰富!我建议你接受横田由纪子的回答。