缓存 – cacheDirectory在0.13中弃用了……所以现在怎么办?

在sbt邮件列表上问这个,但显然它是
phased out

我创建了一个project on github,可以解决“sbt> clean”从吹走神器更新缓存目录.
在0.12.4上工作得很好,但在0.13中打破,我的自定义更新缓存目录在“sbt> update”之后为空

相当于:

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

在0.13?我看到cacheDirectory已被弃用,我们将改用流.

0700的0.13有一个关于使用FileFunction.cached的部分,是替换上面的1个衬垫吗?看起来不像.

流可能确实可以完成这项工作,但是由于使用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]]

想法赞赏,
谢谢

编辑
如果您使用apply而不是map:

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]

最佳答案 完全忘了发布这个问题,谢天谢地很简单:

cleanKeepFiles <+= base / pathToCacheDir

这可以防止SBT在每次清理时都吹掉deps缓存,这样可以减少干净/编译周期几秒钟 – 一个很好的&轻松WIN,就像我们在SBT< = 0.12.4中使用cacheDirectory一样

点赞