SBT使用内部Artifactory解析Ivy依赖异常求助
解决SBT将内部Artifactory中Ivy依赖当作Maven依赖解析的问题
问题原因
原repo.scala-sbt.org是Ivy格式的仓库,依赖采用Ivy布局存储(比如sbt-twirl的路径包含scala_2.12/sbt_1.0/1.5.1/ivys/ivy.xml)。但你当前的~/.sbt/repositories配置中,仅指定了内部仓库的URL,没有明确标记仓库类型,SBT默认会按Maven仓库的规则解析依赖——Maven布局会把Scala和SBT版本合并到artifactId中(比如sbt-twirl_2.12_1.0),并查找.pom文件,这就和你复制到内部Artifactory的Ivy路径不匹配,导致404错误。
解决方法
需要在~/.sbt/repositories中明确指定sbt-releases仓库为Ivy类型,让SBT使用Ivy布局规则解析依赖。修改后的配置如下:
[repositories] maven-central: http://internal-repo-url/mvn_repo_path,allowInsecureProtocol sbt-releases: http://internal-repo-url/sbt_repo_path,allowInsecureProtocol,ivy
或者更明确指定Ivy布局:
[repositories] maven-central: http://internal-repo-url/mvn_repo_path,allowInsecureProtocol sbt-releases: ivy:http://internal-repo-url/sbt_repo_path,allowInsecureProtocol,layout=ivy
验证步骤
- 保存修改后的
~/.sbt/repositories文件 - 清理SBT本地缓存(删除
~/.ivy2/cache或~/.sbt/boot目录) - 重新运行
sbt compile,此时SBT会按照Ivy路径规则查找依赖,匹配你在内部Artifactory中保留的原路径结构,避免404错误。
内容的提问来源于stack exchange,提问作者Philipp Murry
相关产品推荐
相关产品推荐

