sbt发布工件中的scala-library.jar版本

时间:2013-02-10 22:30:51

标签: scala sbt sbt-0.12

由于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。那么这可能是正确的方法吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我认为如果你正在生成'胖JAR',一切都取决于直接依赖的版本(如果我错了,请纠正我)因为它们的直接依赖性也被指定等等。当然,这并不能保证你从某些依赖Scala库版本的组件中得到你想要的东西,你不能保证依赖于某些lib的不同版本的组件,当然Scala处于活跃的开发阶段但是如果你坚持有一些Scala库版本并且测试得很好,直到这个改变你就可以了。

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

相关问题