sbt/Scala 是不是有类似于 Bundler/pip >= 或 ~= 的“兼容版本”?

Posted

技术标签:

【中文标题】sbt/Scala 是不是有类似于 Bundler/pip >= 或 ~= 的“兼容版本”?【英文标题】:Does sbt/Scala have a "compatible release" similar to Bundler/pip >= or ~=?sbt/Scala 是否有类似于 Bundler/pip >= 或 ~= 的“兼容版本”? 【发布时间】:2021-12-27 17:19:36 【问题描述】:

我习惯使用~=>= 来让包管理器升级到最新的兼容版本。

sbt 或 Scala 有类似的东西吗?我在他们的文档上找不到它:https://www.scala-sbt.org/1.x/docs/Library-Management.html

捆绑器等效项:https://bundler.io/gemfile.html 等效点数:https://pip.pypa.io/en/stable/reference/requirements-file-format/#example

感谢您的宝贵时间????

【问题讨论】:

AFAIK 有办法,但从来没有人这样做过,我们不喜欢随机中断的项目。 @LuisMiguelMejíaSuárez 抱歉,有错字吗?:“有办法”或“没有办法” 有一种方法:scala-sbt.org/1.x/docs/Library-Dependencies.html#Ivy+revisions - 但同样,我还没有看到任何项目 (开源或私有) 这样做,恕我直言,它太脆弱了。我们有诸如 scala-stewardmergify 之类的东西来帮助减轻升级依赖项的负担。 感谢您提及 scala-steward 和合并。这是你指的mergify吗?:mergify.com 是的,这就是我的意思。另外,我无法回答,因为它只是一个链接和意见。您可以为自己的问题提供一个很好的答案,详细解释该语法的工作原理。 【参考方案1】:

我只是想总结一下cmets中的对话:

有办法做到这一点:https://ant.apache.org/ivy/history/2.3.0/ivyfile/dependency.html#revision

语法是:

Examples:
[1.0,2.0] matches all versions greater or equal to 1.0 and lower or equal to 2.0
[1.0,2.0[ matches all versions greater or equal to 1.0 and lower than 2.0
]1.0,2.0] matches all versions greater than 1.0 and lower or equal to 2.0
]1.0,2.0[ matches all versions greater than 1.0 and lower than 2.0
[1.0,) matches all versions greater or equal to 1.0
]1.0,) matches all versions greater than 1.0
(,2.0] matches all versions lower or equal to 2.0
(,2.0[ matches all versions lower than 2.0

不建议这样做,还有其他工具可以帮助解决依赖关系。

即使我对 Scala/Java 世界进行了极其简短的探索,但许多依赖项往往会被破坏,并且向后兼容性似乎比我使用 Python 和 Ruby 的经验更重要。甚至文档似乎也会导致依赖关系破裂。为什么在 Scala/Java 世界中通常不使用这些版本范围是有道理的。也很可能是因为我对 Scala/Java 缺乏经验。

希望对你有帮助?

【讨论】:

以上是关于sbt/Scala 是不是有类似于 Bundler/pip >= 或 ~= 的“兼容版本”?的主要内容,如果未能解决你的问题,请参考以下文章

在多模块 Java/scala 项目中有一个通用的 webapp?

IntelliJ 14 - 创建/导入 Scala / SBT 项目

知识积累SBT+Scala+MySQL的Demo

如何通知 SBT 使用插件的特定 scala 版本?

Sbt-assembly 未解决的依赖,Scala

记录一次事故——idea,sbt,scala