由于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。那么这可能是正确的方法吗?
答案 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编译器版本匹配。