【问题标题】:scala-library.jar version in sbt published artifactssbt 发布的工件中的 scala-library.jar 版本
【发布时间】:2013-02-10 22:30:50
【问题描述】:

随着 Scala 2.10.1 即将推出,我相信,我想确保我现在发布的工件能够自动使用该版本的 scala-library.jar。我使用 sbt 0.12.2 发布,并且设置为

scalaVersion := "2.10.0"

我正确地将二进制兼容版本附加到我的工件,例如

<artifactId>mylibrary_2.10</artifactId>

...但是 scala 库依赖项仍然显示 2.10.0:

     <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.10.0</version> <!-- !!! -->
    </dependency>

我想这不正确,这里应该使用 2.10 或 2.10.+?


我也尝试添加scalaBinaryVersion := "2.10",但这似乎没有任何改变。

我的另一个想法是使用scalaVersion := "2.10.+"。 Sbt 与Getting Scala 2.10.+ ... 一起使用很长时间,但它最终运行良好,pom 现在为 scala-library.jar 提供了这个版本。所以也许这是正确的方法?

【问题讨论】:

  • 显然“交叉构建”更常见。请参阅scala-sbt.org/release/docs/Detailed-Topics/Cross-Build 了解更多信息。我无法告诉您您找到的解决方案是否正确。
  • 好吧,我现在可以说的一件事是2.10.+ 增加了严重的问题。我刚刚发现自己在随机位置出现打字错误,直到我发现某些项目已经以某种方式绘制了一个 scala-compiler.jar 2.10.1-RC1,这显然是不兼容二进制
  • 好吧,Scala 库的版本等于您所针对的 Scala 版本,因为 2.10.1 版的 scala-library 与 2.10.0 版的 scala-library 不同。所有 Scala 2.10 版本都应该是二进制兼容的。您能否发布从 2.10.0 切换到 2.10.1 时遇到的错误类型?
  • 它们是典型的二进制问题错误,例如找不到方法或访问错误。这只是因为一些 RC 版本加入了,我想是从 scala-actors 那里得到的,我不记得了。现在 2.10.1 已经发布,我可以观察混合 2.10.0 和 2.10.1 的行为。基本上它是“好的”,但我从 sbt 收到了一堆恼人的警告消息,即不同的人工制品使用不同的 scala-lang 版本(2.10.0 与 2.10.1)。我现在只是忽略它们,看起来很好。

标签: scala sbt sbt-0.12


【解决方案1】:

你应该选择 2.10.x,因为它意味着在次要版本之间是二进制兼容的(如 release notes 中所述)。

通常,您可以使用 sbt 中的crossScalaVersions 设置为任意版本的 Scala 生成工件。

build.sbt

name := "so-14803362"

scalaVersion := "2.10.0"

crossScalaVersions := Seq("2.10.0", "2.10.1", "2.10.2")

通过上述配置,您可以在 sbt 命令前添加 + 来为每个 Scala 版本运行它们:

> + publish

这将使用crossScalaVersions 中列出的每个 Scala 版本构建和发布项目的工件。

请参阅sbt docs 了解更多信息。

【讨论】:

  • 谢谢。然而,我知道交叉版本,我很高兴在 2.10 中放弃了它。我认为在没有必要的情况下将世界上的文物数量增加三到四倍是可怕的。
  • 好点。显然,对于 2.10,跨版本仅产生一个 2.10.x 工件,但您仍然可以确信您已涵盖列出的版本。
【解决方案2】:

我认为,如果您正在生成“胖 JAR”,那么一切都取决于直接依赖项的版本(如果我错了,请纠正我),因为它们的直接依赖项也被指定等等。当然,这并不能保证某些组件依赖于 Scala 库版本而不是您想要的,您不能保证组件依赖于某些库的不同版本,当然 Scala 处于积极开发阶段,但如果您坚持使用一些 Scala 库版本并经过良好测试,直到这一切发生变化。

但是你不能保证在下一个 Scala 库上一切都会好起来,因为你还有其他组件可能不会在同一天同步,对吧?而且,是的,Scala 库的版本应该与使用的 Scala 编译器的版本相匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-06
    • 2013-01-25
    • 2011-05-27
    • 2015-07-06
    • 2012-06-11
    • 1970-01-01
    • 2016-08-22
    • 2013-03-22
    相关资源
    最近更新 更多