如何更改尚未设置的 Scala 应用程序中的依赖项版本?

Posted

技术标签:

【中文标题】如何更改尚未设置的 Scala 应用程序中的依赖项版本?【英文标题】:How do I change the version of a dependency in a Scala application that I haven't set? 【发布时间】:2021-08-24 08:01:56 【问题描述】:

我正在尝试构建一个 Scala 播放应用程序,但由于 repo 不再启动,依赖项突然无法下载

下面的完整堆栈跟踪。我曾经得到 scalaz-stream v0.7a 依赖就好了,但它似乎不再出现在网站上。有一个快照 0.7a 可供我使用。但是我只需要知道如何将版本切换到这个版本?

我不知道 scalaz 依赖项的来源或定义的位置。我自己没有设置它,如果我搜索目录中的所有文件,则没有提及 scalaz

一定有某个地方我可以将它从 0.7a 更改为 snapshot-0.7a

[info] Resolving jline#jline;2.12.1 ...
[warn]  [FAILED     ] org.scalaz.stream#scalaz-stream_2.11;0.7a!scalaz-stream_2.11.jar(bundle):  (0ms)
[warn] ==== local: tried
[warn]   /home/vagrant/.ivy2/local/org.scalaz.stream/scalaz-stream_2.11/0.7a/bundles/scalaz-stream_2.11.jar
[warn] ==== public: tried
[warn]   https://repo1.maven.org/maven2/org/scalaz/stream/scalaz-stream_2.11/0.7a/scalaz-stream_2.11-0.7a.jar
[warn] ==== maven-central: tried
[warn]   https://repo1.maven.org/maven2/org/scalaz/stream/scalaz-stream_2.11/0.7a/scalaz-stream_2.11-0.7a.jar
[warn] ==== LocalIvy: tried
[warn]   /home/vagrant/.ivy2/local/org.scalaz.stream/scalaz-stream_2.11/0.7a/bundles/scalaz-stream_2.11.jar
[warn] ==== scalaz-mulesoft: tried
[warn]  https://repository.mulesoft.org/nexus/content/repositories/public/org/scalaz/stream/scalaz-stream_2.11/0.7a/scalaz-stream_2.11-0.7a.jar
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::              FAILED DOWNLOADS            ::
[warn]  :: ^ see resolution messages for details  ^ ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: org.scalaz.stream#scalaz-stream_2.11;0.7a!scalaz-stream_2.11.jar(bundle)
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[info] Resolving jline#jline;2.12.1 ...
[info] Done updating.
[info] Resolving jline#jline;2.12.1 ...
[info] Done updating.
[info] Wrote /vagrant/dummy-services/target/scala-2.11/dummy-services_2.11-1.1.1.pom
sbt.ResolveException: download failed: org.scalaz.stream#scalaz-stream_2.11;0.7a!scalaz-stream_2.11.jar(bundle)
        at sbt.IvyActions$.sbt$IvyActions$$resolve(IvyActions.scala:313)
        ...
        at java.lang.Thread.run(Thread.java:748)
[error] (akka-quartz/*:update) sbt.ResolveException: download failed: org.scalaz.stream#scalaz-stream_2.11;0.7a!scalaz-stream_2.11.jar(bundle)
[error] Total time: 7 s, completed Jun 3, 2021 1:38:01 PM

【问题讨论】:

scalaz-stream 已死,此时已死了很长时间。你会想用 e 替换它。 G。 fs2 或 zio-stream。 【参考方案1】:

@mpilquist推文

https://twitter.com/mpilquist/status/1389586284243476484

scalaz-stream 的早期版本已在 bintray 上发布,自 5 月 1 日起不再提供服务。尝试升级到 Maven Central 上的 0.7.3a(2015 年 8 月发布)。或者,升级到 fs2 3.0.x :)

【讨论】:

【参考方案2】:

如果您的代码中没有对 scalaz-stream 的任何引用,则意味着它来自另一个可传递的依赖项。

你有几个选择:

在你的依赖中添加一个不同版本的scalaz-stream,这应该覆盖传递的版本。 (实际上并不是最佳做法) 例如使用sbt dependencyBrowseTree 找出需要scalaz-stream 的依赖项。然后检查此依赖项是否无法自行更新。 您还可以定义 dependencyOverrides 而不是第一个选项

无论如何不要使用带有 snapshot 的版本,它可能不是一个稳定的版本,因此不能使用。

【讨论】:

感谢@gaël-j,我认为覆盖该版本是目前最好的解决方法。不完全确定如何,我正在尝试将dependencyOverrides += "org.scalaz.stream" %% "scalaz-stream" % "0.7.2", 添加到项目中,但它仍在尝试获取 0.7a 这应该足够了。您应该运行 sbt dependencyBrowseTree 以获得更多见解(可从 sbt 1.4 本地获得,否则您需要添加插件) 此解决方案有效。谢谢 //resolvers += "scalaz-bintray" at "dl.bintray.com/scalaz/releases" dependencyOverrides += "org.scalaz.stream" %% "scalaz-stream" % "0.7.2"

以上是关于如何更改尚未设置的 Scala 应用程序中的依赖项版本?的主要内容,如果未能解决你的问题,请参考以下文章

由于找不到依赖项而导致编译Scala程序失败

Play 2.0 / SBT:从 Build.scala 中的某些/所有模块中排除某些传递依赖项

Scala sbt:sbt 中的多个依赖项

干净的 sbt 项目中的 Scala Play 框架依赖项

安装依赖项后如何清理heroku中的缓存?

IntelliJ Idea 中用于 Scala 的模块 SDK