SBT:如何确保本地快照依赖关系被提取



我有两个scala项目,A和B。A依赖于B。在将更改推送到中央远程回购之前,我必须进行一些本地测试。所以我在B中进行了更改,将其版本.sbt更改为0.0.1SNAPSHOT,并使用在本地发布

sbt publishLocal

我可以在"C:\var.ivy2\local"中看到0.0.1-SNAPSHOT。

在A中,我将DependencyManagement.scala更改为现在获取B:的快照版本

val BVersion = "0.0.1-SNAPSHOT"

但在调试A的过程中,我看到B的类是从C:UsersmyusernameAppDataLocalCoursiercache....artifactoryvirtual-ivy中的jar中提取的

如何确保选择快照版本?

尝试在build.sbt中将coursier TTL设置为0秒

import scala.concurrent.duration.DurationInt
import lmcoursier.definitions.CachePolicy
csrConfiguration := csrConfiguration.value
.withTtl(0.seconds)
.withCachePolicies(Vector(CachePolicy.LocalOnly)

或通过环境变量

COURSIER_TTL="0s"

根据sbt文件

默认情况下,Coursier中的SNAPSHOT工件为24小时生存时间(TTL(以避免网络IO。如果需要强制重新解析SNAPSHOTS,在COURSIER_TTL环境下运行sbt变量设置为0s

您不需要在本地发布来测试您的更改。您还可以使用ProjectRef:添加本地子项目依赖项

lazy val B = ProjectRef(file("path/to/B"), "nameOfSubproject")
lazy val A = (project in file("A")).dependsOn(B)

这实际上更方便,因为sbt将在需要时自动重新编译B。

最新更新