我有两个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。