Scala SBT:在本地依赖项更改时触发操作

Scala SBT:在本地依赖项更改时触发操作,scala,sbt,Scala,Sbt,在SBT中,可以使用“~”标记在源文件更改时触发操作。比如说, sbt> ~test 将在源代码更改时运行单元测试 当源更改或本地依赖项更改时,是否有好的方法触发操作?这在同时开发两个项目时非常有用,其中一个项目依赖于另一个项目 我知道您可以通过手动指定or的路径来获得此行为,但这很脆弱,而且SBT已经知道从何处获取其本地工件,因此这是我希望避免的。从的文档中,您可以在watchSources任务中添加要监视的其他文件 从中,managedClasspath任务提供来自托管依赖项的类路径

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

sbt> ~test
将在源代码更改时运行单元测试

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


我知道您可以通过手动指定or的路径来获得此行为,但这很脆弱,而且SBT已经知道从何处获取其本地工件,因此这是我希望避免的。

从的文档中,您可以在
watchSources
任务中添加要监视的其他文件

从中,
managedClasspath
任务提供来自托管依赖项的类路径部分

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

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

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

我使用该设置得到一个明显的无限循环,只需使用命令“~compile”。你的意思是在sbt代码中有一个循环,还是在没有任何更改或其他情况时它会不断重新触发?其他一些可能相关的信息:你使用的是什么sbt版本和什么插件?这里有一个例子:好的,谢谢你的例子。发生的情况是,
~
是基于轮询的,并且将每秒评估
监视源任务(或者由
pollInterval
配置的任何内容)。在这种情况下,评估
managedClasspath
需要评估
update
,但是
update
不起任何作用,因为它是缓存的。不过,没有缓存的是警告。警告不是在RC2版本的0.12.3中生成的,因此您可以切换到该版本。