在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一样