即使项目依赖关系管理配置未更改,SBT也会在clean
之后每次运行依赖项解析。在CI服务器上运行时,这非常耗时。
但文档says:
- 通常,如果自上次成功解析后没有依赖关系管理配置发生更改,并且检索到的文件仍然存在 目前,sbt并未要求Ivy执行解决方案。
醇>
每次使用sbt clean publish-local
构建项目时,如何阻止sbt进行依赖项解析?
更新
我发现当我使用sbt
进入交互模式时,sbt也会运行解析。
UPDATE2
如果@Ezhik
指出我是否可以保留target/resolution-cache
,则sbt将不会在清理后解析依赖关系。
所以我试图将resolution-cache
从目标目标移出:
ivyConfiguration <<= (externalResolvers, ivyPaths, offline, checksums, appConfiguration, target, streams) map { (rs, paths, off, check, app, t, s) =>
val resCacheDir = t / ".." / "resolution-cache"
new InlineIvyConfiguration(paths, rs, Nil, Nil, off, Option(lock(app)), check, Some(resCacheDir), s.log)
}
现在使用Build.scala
中的此代码,解析缓存放在项目根目录中,因此在clean
之后保留,但无论如何都要进行解析。所以我认为这种方法是错误的或不充分的。
答案 0 :(得分:9)
由于目录target/resolution-cache
包含常春藤报告。很明显,您在target
操作时删除了所有clean
内容。
恕我直言如果你想保留解决状态,你必须将它指向你的项目中target
以外的某个地方。
更新
vs SBT.0.12.4.RC1
resolution-cache
的位置
检查IvyConfiguration的位置 - 在项目范围
> inspect ivy-configuration
[info] Task: sbt.IvyConfiguration
[info] Description:
[info] General dependency management (Ivy) settings, such as the resolvers and paths to use.
[info] Provided by:
[info] {file:/home/ezh/projects/sbt/}xsbt/*:ivy-configuration
[info] Dependencies:
[info] xsbt/*:offline
将其修复为build.sb。
ivyConfiguration <<= (ivyConfiguration, baseDirectory) map {
case (c: InlineIvyConfiguration, b) => import c._
new InlineIvyConfiguration(paths, resolvers, otherResolvers, moduleConfigurations,
localOnly, lock, checksums, resolutionCacheDir.map(_ => b / "123"), log)
case (other, _) => other // something unknown
}
4测试... Ups ...分辨率仍然有效...调查。 - &GT;
target/scala-2.10/cache/default-920e5d/global/update/output
缓存包含指向resolution-cache
的指针:)
修复它。
cacheDirectory <<= baseDirectory / "234"
测试。得到它了。分辨率被跳过。
所需配置的摘要更改:
ivyConfiguration <<= (ivyConfiguration, baseDirectory) map {
case (c: InlineIvyConfiguration, b) => import c._
new InlineIvyConfiguration(paths, resolvers, otherResolvers, moduleConfigurations,
localOnly, lock, checksums, resolutionCacheDir.map(_ => b / "123"), log)
case (other, _) => other // something unknown
}
cacheDirectory <<= baseDirectory / "234"
vs SBT.0.13.x
@deprecated("Use the cacheDirectory provided by streams.", "0.13.0")
答案 1 :(得分:6)
您可能有SNAPSHOT依赖项。它们随时都有变化,因此必须在每次运行时解决。你可以用
来抑制它 offline := true
答案 2 :(得分:6)
这适用于0.13.1。
cleanKeepFiles ++= Seq("resolution-cache", "streams").map(target.value / _)
答案 3 :(得分:4)
您可以使用以下设置阻止clean
删除某些文件:
// path should be adapted for newer sbt versions
cleanKeepFiles <+= cacheDirectory / "update"