cacheDirectory在0.13中弃用...所以现在怎么办?

时间:2013-08-18 12:55:10

标签: caching task sbt updates

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

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

相当于:

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

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

0.13的SBT FAQ有一个关于使用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]]

观点赞赏, 感谢

修改
如果您使用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]

2 个答案:

答案 0 :(得分:2)

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

cleanKeepFiles <+= base / pathToCacheDir

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

中使用cacheDirectory一样

答案 1 :(得分:0)

在我的案例中,只需将target更改为cacheDirectory <<= baseDirectory / "sbt-no-clean" 即可:

来自:

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

var user = [37, 2, 987, 53, 3322, 12, 9];

function check(item) {
    console.log(item + ' has type ' + typeof item);

    if (item !== 'number') {
        return true;
    } else {
        return false;
    }
}

console.log(user.some(check));
/* Result:
    37 has type number 
    true
*/