5

在 sbt 邮件列表上问过这个问题,但显然它正在逐步淘汰

在 github 上创建了一个项目,该项目围绕“sbt> clean”从吹走工件更新缓存目录。在 0.12.4 上工作得很好,但在 0.13 中坏了,我的自定义更新缓存目录在“sbt> update”之后是空的

相当于什么:

cacheDirectory <<= baseDirectory / "sbt-no-clean"

在 0.13 中?我看到它cacheDirectory已被弃用,我们将使用它streams

0.13的SBT 常见问题解答有一个关于使用 FileFunction.cached 的部分,是上述 1 衬里的替代品吗?看起来不像。

Streams 确实可以完成这项工作,但是由于旧的使用方法cacheDirectory不再有效——好吧,从技术上讲,属性已设置,但有些东西会覆盖它,所以它更多的是删除而不是弃用功能——我已经换档了我正在尝试使用cleanKeepFiles

cleanKeepFiles <<= (streams) map{s=> Seq(s.cacheDirectory)}

我得到一个返回类型不匹配,一个令人抓狂的,因为我不知道如何转向:

sbt.Def.Initialize[sbt.Task[Seq[java.io.File]]]

进入

sbt.Def.Initialize[Seq[java.io.File]]

想法赞赏,谢谢

编辑
如果您使用应用而不是地图:

cleanKeepFiles <<= streams.apply{_.map(x=>Seq(x.cacheDirectory))}

然后你得到:

sbt.Task[Seq[java.io.File]]

这似乎越来越近了,但是编译器想要:

Seq[java.io.File]

cleanKeepFiles是类型SettingKey[Seq[File]]

我对如何SettingKey[Seq[File]]摆脱流的类型感到困惑:TaskKey[TaskStreams]

4

2 回答 2

2

完全忘记了发布这个问题,幸好解决方案非常简单:

cleanKeepFiles <+= base / pathToCacheDir

这可以防止 SBT 在每次清理时吹走 deps 缓存,从而减少清理/编译周期的几秒钟 - 一个不错且简单的胜利,就像我们能够在 SBT <= 0.12.4 中使用 cacheDirectory

于 2013-10-17T17:53:20.490 回答
0

只需更改cacheDirectorytarget在我的情况下工作:

从:

cacheDirectory <<= baseDirectory / "sbt-no-clean"

target <<= baseDirectory / "sbt-no-clean"
于 2015-07-14T06:17:47.980 回答