【问题标题】:Scala SBT: Triggering an action when local dependencies changeScala SBT:当本地依赖发生变化时触发动作
【发布时间】:2013-03-23 03:17:37
【问题描述】:

在 SBT 中,您可以使用“~”标记在源文件更改时触发操作。例如,

sbt> ~test

将在源更改时运行单元测试。

当源更改本地依赖项更改时,是否有任何好的方法来触发操作?这在同时开发两个项目时非常有用,其中一个项目依赖于另一个项目。

我知道您可以通过手动指定 filethe base project 的路径来实现此行为,但这很脆弱,而且 SBT 已经知道它从哪里获取本地工件,所以我想避免这种情况。

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    根据Triggered Execution 的文档,您可以在watchSources 任务中添加其他要监视的文件。

    another question 开始,managedClasspath 任务提供了来自托管依赖项的类路径部分。

    然后,以下定义将托管测试类路径添加到文件以监视触发执行:

    watchSources <++=
      (managedClasspath in Test) map { cp => cp.files }
    

    在您要触发的每个项目中定义它。

    【讨论】:

    • 我得到了一个明显的无限循环,只需使用命令“~ compile”。
    • 您的意思是 sbt 代码中有一个循环,还是在没有任何变化或其他情况时不断重新触发?其他一些可能相关的信息:你使用的是什么 sbt 版本和插件?
    • 好的,谢谢你的例子。发生的情况是~ 是基于轮询的,并且将每秒评估watchSources 任务(或pollInterval 配置的任何内容)。在这种情况下,评估managedClasspath 需要评估update,但update 不会做任何工作,因为它被缓存了。不过,没有缓存的是警告。
    • 在 RC2 的 0.12.3 中不会生成警告,因此您可以切换到该版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 2020-11-08
    • 2017-05-21
    • 2014-05-09
    • 2010-09-19
    相关资源
    最近更新 更多