You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SBT 1.9.7无法获取最新SNAPSHOT依赖,如何解决?

问题:SBT 1.9.7无法下载最新SNAPSHOT依赖
  • 此前看到Stack Overflow相关问题的评论提到:无需将SNAPSHOT依赖标记为changing(),SBT已配置Ivy自动识别快照包更新
  • 使用SBT 1.9.7版本,执行test和show externalDependencyClasspath后,发现仍引用过期的SNAPSHOT jar包,该jar位于~/Library/Caches/Coursier/v1/https/目录
  • 推测Coursier不支持Ivy的自动识别快照更新特性,或Ivy配置未应用到Coursier
  • 已尝试删除缓存目录、在依赖声明中添加/移除changing()、多次执行sbt update,均无法让SBT使用最新依赖版本,且已确认Nexus服务器上存在新版本快照包
  • 需求:如何让SBT下载最新的SNAPSHOT版本?

解决方案

1. 强制Coursier更新快照包

SBT 1.9+默认使用Coursier作为依赖管理工具,它的SNAPSHOT更新逻辑和Ivy不同,可直接执行强制更新命令:

sbt "dependencyUpdates; update"

或者针对性强制刷新所有快照依赖:

sbt update -SNAPSHOT

若只需更新特定模块,可指定模块信息:

sbt "update 你的组名::你的Artifact名"

2. 配置Coursier的快照更新策略

在build.sbt或全局配置文件~/.sbt/1.0/global.sbt中添加以下配置,强制Coursier每次构建都检查远程仓库的最新快照版本:

import coursier.core.Snapshot

ThisBuild / coursierSnapshotUpdatePolicy := Snapshot.UpdatePolicy.Always

3. 清理特定快照的Coursier缓存

无需删除全部缓存,可精准删除对应快照的缓存文件,示例命令:

rm -rf ~/Library/Caches/Coursier/v1/https/你的Nexus域名/你的组名/你的Artifact名/快照版本号/

执行后再运行sbt update即可。

4. 检查Nexus快照元数据

确认Nexus上的SNAPSHOT包元数据(如maven-metadata.xml)已更新。如果元数据未同步,Coursier会认为本地缓存的版本是最新的。可直接访问Nexus对应快照路径查看元数据文件,确认其中的版本和文件信息是最新状态。

5. 临时切换回Ivy依赖管理

若Coursier相关方案无效,可临时切换回Ivy:

  1. 在project/plugins.sbt中添加插件:
addSbtPlugin("org.scala-sbt" % "sbt-ivy" % "1.0.0")
  1. 在build.sbt中启用Ivy:
ThisBuild / dependencyManager := DependencyManager.Ivy

之后执行sbt update,Ivy会按原有逻辑识别并下载最新SNAPSHOT。

内容的提问来源于stack exchange,提问作者Troy Daniels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 14:22:27