我使用它工作sbt publishLocal
发布了一些库,并发布到我的~/.ivy2/local
目录中。
然后我有一个依赖于这些库的项目,但sbt update
找不到它们。
具体来说,我的项目具有以下依赖项:
lazy val myDependencies = commonDependencies ++ Seq(
"my.corp" %% "lib1" % "1.0.1-SNAPSHOT" withSources () withJavadoc (),
"my.corp" %% "lib2" % "2.0.2-SNAPSHOT" withSources () withJavadoc ()
)
sbt update
有此错误:
[error] (services / update) lmcoursier.internal.shaded.coursier.error.FetchError$DownloadingArtifacts: Error fetching artifacts:
[error] file:////home/myuser/.ivy2//local/my.corp/lib1_2.12/1.0.1-SNAPSHOT/jars/lib1.jar: not found: /home/myuser/.ivy2//local/my.corp/lib1_2.12/1.0.1-SNAPSHOT/jars/lib1.jar
[error] file://///home/myuser/.ivy2//local/my.corp/lib2_2.12/2.0.2-SNAPSHOT/jars/lib2.jar: not found: /home/myuser/.ivy2//local/my.corp/lib2_2.12/2.0.2-SNAPSHOT/jars/lib2.jar
当我查看目录时,我可以看到已发布的 jar,但它们的名称附加了 scala 版本,这就是update
解析失败的原因,我认为:
$ ls /home/myuser/.ivy2/local/my.corp/lib1_2.12/1.0.1-SNAPSHOT/jars
lib1_2.12.jar lib1_2.12.jar.md5 lib1_2.12.jar.sha1
$ ls /home/myuser/.ivy2/local/my.corp/lib2_2.12/2.0.2-SNAPSHOT/jars
lib2_2.12.jar lib2_2.12.jar.md5 lib2_2.12.jar.sha1
如果我真正发布到存储库,我可以解析库。
有谁知道解决这个问题的sbt咒语吗?;-(
干杯 卡尔
更新:-我认为 coursier 是问题所在,不知道如何告诉它寻找lib2_2_12.jar。它可能有一个错误的缓存引用吗?
Caused by: lmcoursier.internal.shaded.coursier.cache.ArtifactError$NotFound: not found: /home/myuser/.ivy2/local/my.corp/lib2_2.12/2.0.2-SNAPSHOT/jars/lib2.jar
更新:-禁用库西耶工作 从 sbt REPL 我可以运行
sbt:my-project> set ThisBuild / useCoursier := false
然后
sbt:my-project> update
这奏效了,但将其设置回真实更新再次失败,所以这看起来是一个更棘手的问题。
更新:从命令行获取工作!!
coursier fetch my.corp::lib1:1.0.1-SNAPSHOT --no-default -r central -r ivy2Local
下载了传递依赖项,并在我当地的 Ivy2 目录中找到了我的 jar
所以这又回到了看起来像SBT - Coursier交互问题
我刚刚遇到了这个问题,在旧工作版本和这个非工作版本之间有很多差异之后,我发现是触发 sbt 和/或 coursier 错误withSources()
。