11

由于 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 提供了这个版本。所以也许这是正确的方法?

4

2 回答 2

1

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

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

构建.sbt

name := "so-14803362"

scalaVersion := "2.10.0"

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

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

> + publish

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

有关更多信息,请参阅sbt 文档

于 2013-06-24T20:17:38.230 回答
0

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

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

于 2013-04-19T21:29:35.343 回答