在 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]