You need to enable JavaScript to run this app. 如何配置SBT依赖,让CircleCI可识别lib目录下的快照版本依赖
优惠活动
大模型
产品
解决方案
定价
更多

如何配置SBT依赖,让CircleCI可识别lib目录下的快照版本依赖

解决方案

你之前将完整Ivy目录结构放入lib目录未生效,是因为sbt默认的lib目录仅用于存储非托管依赖,只会直接扫描该目录下的jar文件,不会识别嵌套的Ivy格式组织、版本路径结构。

以下两种方案都可以满足你保留托管依赖声明、同时让CircleCI正常解析快照依赖的需求:

方案1:配置本地目录为Ivy仓库

完全保留你原有的托管依赖配置,不需要调整依赖声明,操作步骤:

  • 在项目A根目录新建名为local-ivy-repo的目录,将你之前整理的完整Ivy目录结构(顶层为com.phasmidsoftware的整套文件)整体移入local-ivy-repo目录
  • 在build.sbt中添加本地Ivy仓库的解析配置
  • 将local-ivy-repo目录提交到Git推送到GitHub即可,sbt会优先从本地配置的Ivy仓库查找对应快照依赖,CircleCI环境可以直接读取该目录下的依赖文件

方案2:直接用非托管依赖覆盖托管依赖解析

如果你不想额外配置仓库,也不需要删除原有build.sbt中的快照依赖声明,sbt的非托管依赖优先级高于托管依赖,你只要做两步:

  • 将项目B的jar包直接放入项目A的lib目录(不需要嵌套子目录)
  • 提交lib目录下的jar到Git即可。此时不管依赖声明里的快照版本是否能从远程仓库拉取到,sbt都会优先使用lib目录下的本地jar,本地开发和CI环境都可以正常运行。

方案1调整后的build.sbt示例:

organization := "com.phasmidsoftware"

name := "Number"

version := "1.0.9"

scalaVersion := "2.13.6"

scalacOptions ++= Seq( "-target:jvm-1.8", "-encoding", "UTF-8", "-unchecked", "-deprecation", "-Ywarn-dead-code", "-Ywarn-value-discard", "-Ywarn-unused" )

val scalaTestVersion = "3.2.3"

libraryDependencies += "org.scalatest" %% "scalatest" % scalaTestVersion % "test"

resolvers += "Typesafe Repository" at "https://repo.typesafe.com/typesafe/releases/"
// 新增本地Ivy仓库配置
resolvers += Resolver.file("Local Snapshot Repo", baseDirectory.value / "local-ivy-repo")(Resolver.ivyStylePatterns)

libraryDependencies ++= Seq(
  "com.phasmidsoftware" %% "matchers" % "1.0.4-SNAPSHOT",
  "org.scala-lang.modules" %% "scala-parser-combinators" % "1.2.0-M1",
  "org.apache.commons" % "commons-math3" % "3.6.1",
  "org.slf4j" % "slf4j-api" % "1.7.31",
  "ch.qos.logback" % "logback-classic" % "1.2.3" % "test",
  "org.scalacheck" %% "scalacheck" % "1.14.1" % "test"
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 02:54:05