如何更改尚未设置的 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 应用程序中的依赖项版本?的主要内容,如果未能解决你的问题,请参考以下文章