SBT 在所有子项目之后运行任务

2024-01-29

我想编写一个在所有子项目任务完成后运行的任务。

例如,如果我这样做

sbt a b然后在所有子项目上完成任务 a 后,我想执行任务 b。我不想对每个项目都做(a b)。

那可能吗?

事实上,我会直接修改build.sbt。我不一定必须在命令行中指定它。


我写了一篇关于这个主题的博客文章:使用 sbt-sequential 对任务进行排序 http://eed3si9n.com/sequencing-tasks-with-sbt-sequential.

添加命令别名

这是一个例子。我们将定义一个自定义任务a在 sub1 和 sub2 中以及b在根中。实现顺序执行的最简单方法是使用addCommandAlias,所以我们就这样做。

lazy val a = taskKey[Unit]("a")
lazy val b = taskKey[Unit]("b")

lazy val root = (project in file(".")).
  aggregate(sub1, sub2).
  settings(addCommandAlias("ab", ";a;b"): _*).
  settings(
    b := {
      println("b")
    }
  )

lazy val sub1 = (project in file("sub1")).
  settings(a := println("a - sub1"))

lazy val sub2 = (project in file("sub2")).
  settings(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

Def.taskDyn

这是另一个例子。这次使用Def.taskDyn,这也在博客文章中有所体现。 我正在构建一个ScopeFilter来自aggregate然后我正在调度任务a给他们。

lazy val a = taskKey[File]("a")
lazy val b = taskKey[Seq[File]]("b")

lazy val root = (project in file(".")).
  aggregate(sub1, sub2).
  settings(
    b := (Def.taskDyn {
      val proj = thisProject.value
      val filter = ScopeFilter(inProjects(proj.aggregate: _*))
      Def.task {
        val allValues = a.all(filter).value
        println(allValues.mkString(","))
        allValues
      }
    }).value
  )

lazy val sub1 = (project in file("sub1")).
  settings(a := new File("a"))

lazy val sub2 = (project in file("sub2")).
  settings(a := new File("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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SBT 在所有子项目之后运行任务 的相关文章

随机推荐

  • 在 Ruby on Rails 中向按钮添加 Bootstrap 图标

    我想在 ruby on Rails 中的按钮上添加一个图标 目前我已经尝试了以下方法 生成以下 html
  • 整数之和 - 'int' 对象不可迭代

    我的问题与 python 中的 sum 函数有关 所以我的代码是 def black jack a b if sum a b gt 21 return 0 else return sum a b print black jack 10 5
  • 以编程方式更改按钮的drawableLeft

    我正在使用按钮
  • 在 JavaScript 中从一种基数转换为另一种基数[重复]

    这个问题在这里已经有答案了 在 JavaScript 中 是否有任何内置函数可以将整数从一个给定基数转换为另一个给定基数 我注意到已经可以使用以下命令将十进制数转换为另一个基数toString numberToConvertTo 但我还没有
  • Javascript 滚动到末尾

    有时 软件安装程序会强制您在启用 我同意 框之前滚动到 EULA 的末尾 如何在网页上产生同样的效果
  • 从 Spark 集群收集数据时出现内存不足错误

    我知道有很多关于 Spark 内存不足错误的问题 但我还没有找到解决方案 我有一个简单的工作流程 从 Amazon S3 读取 ORC 文件 filter直至一小部分行 select一小部分列 collect进入驱动程序节点 这样我就可以在
  • 我们如何在 Spring Boot 中使用任一验证?

    我的 bean 中有两个变量 我想要填写名称或手机 它们不能同时为空 NotNull private String name NotNull private String mobile 我怎样才能做到这一点 您需要为此编写自定义注释并在类上
  • Apache X-Frame-Options 允许来自多个域

    当我在 apache 中使用 x frame headers 选项时出现错误 Header always append X Frame Options ALLOW FROM site1 site2 site3 or Header alway
  • 指向作为 JNA 方法参数的结构数组的指针

    我正在尝试创建一个 JNA 实现SctpDrv http www bluestop org SctpDrv 图书馆 我的问题是我不了解指向结构数组的指针 我试图寻找解决方案 但它们总是与我需要知道的略有不同 JNA 文档仅显示了一个带有指向
  • Java 中 CRTP 的替代品 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 The CRTP https en wikipedia org wiki Curiously recurring template patter
  • 在 React Native 中存储来自 json api 的大数据集合的最佳方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我需要制作一个具有离线功能的应用程序 可以从 json api 获取大约 10 000 个对象 估计 10mb 数据 并将它们存储在本地 以便在
  • Eloquent:带时间戳的默认值无效

    这是我的迁移架构 public function up Schema create objects function Blueprint table table gt increments id table gt timestamp tim
  • UICollectionView补充视图如何正确插入或删除

    简短的问题 有没有办法添加和删除补充视图 例如单元格和部分performBatchUpdates 块类似于insertItemsAtIndexPaths deleteItemsAtIndexPaths 甚至reloadItemsAtInde
  • 为什么 Oracle 不告诉你哪个表或视图不存在?

    如果您使用过 Oracle 您可能会收到有用的消息 ORA 00942 表或视图不存在 该消息不包含丢失对象的名称是否存在合法的技术原因 关于这是出于安全原因的争论听起来像是美国运输安全管理局 TSA 精心策划的 如果我是攻击者 我就会知道
  • 如何使用 d.items() 更改 for 循环中的所有字典键?

    我需要一些帮助来理解为什么这段代码没有按预期工作 如果想更改字典的键但保留值 他 她可以使用 d new key d pop old key 我想修改所有键 并将值保留在适当的位置 但下面的代码会跳过某些行 col2 保持不变 是因为字典是
  • 为什么管道的容量有限?

    我读到管道需要有有限的容量 但我不明白为什么 如果进程无限制地写入管道会发生什么 这是由于缓冲 管道并不 神奇 管道并不能确保所有进程都按步调一致地处理每个单独的字节或字符 相反 管道缓冲进程间输出 然后传递缓冲区 这个缓冲区大小限制就是您
  • 带滑动菜单的 Sherlock 操作栏

    我正在创建一个扩展 SherlockMapActivity 的视图和活动 并使用 SlidingMenu 库使我的主视图像 Google 一样滚动 我已经通过 XML 添加了 SlidingMenu 并且我的视图滚动完美地显示了隐藏菜单 但
  • 如何停止matlabplot3缩放

    我想使用绘制摆 改变位置 plot3功能 不幸的是 当我的点在循环中改变位置并再次绘制时 3d 图的比例也在变化 因此 x 轴取决于位置变化 取决于点的位置 它可以从 1 到 1 5 或从 1 到 3 并且 y 也会改变 只有 z 表示相同
  • 如何检测 Ag-grid 中的细胞模糊(失焦)事件

    我需要检测网格单元何时在农业网格中失去焦点 我已经检查了文档中可用的 API 但没有找到任何类似于单元格模糊的内容 https www ag grid com javascript grid events https www ag grid
  • SBT 在所有子项目之后运行任务

    我想编写一个在所有子项目任务完成后运行的任务 例如 如果我这样做 sbt a b然后在所有子项目上完成任务 a 后 我想执行任务 b 我不想对每个项目都做 a b 那可能吗 事实上 我会直接修改build sbt 我不一定必须在命令行中指定