2013-02-10 76 views
11

由於Scala 2.10.1即將推出,我相信,我想確保我現在發佈的工件將自動與該版本的scala-library.jar一起工作。我用SBT 0.12.2發佈,並與scala-library.jar版本中發佈的工件

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。所以也許這是正確的方法?

+1

顯然這是'交叉構建'更常見的。有關更多信息,請參閱http://www.scala-sbt.org/release/docs/Detailed-Topics/Cross-Build。我無法告訴您您找到的解決方案是否正確。 – EECOLOR 2013-02-14 17:41:46

+0

嗯,我現在可以說的一件事是'2.10。+'增加了嚴重的問題。我在隨機地方發現了自己的typer錯誤,直到我發現某個項目已經繪製了一個scala-compiler.jar'2.10.1-RC1',它顯然是_not binary compatible_。 – 2013-02-15 23:59:47

+0

那麼,Scala庫的版本等於您定位的Scala版本,因爲版本2.10.1的scala-library與scala-library 2.10.0不同。所有的Scala 2.10版本都應該是二進制兼容的。你可以發佈從2.10.0切換到2.10.1時發生的錯誤嗎? – 2013-03-26 17:31:19

回答

0

我想如果你正在生成'胖JAR',一切都是由直接依賴的版本(糾正我,如果我錯了),因爲他們的直接依賴關係被指定等等。當然這並不能保證你的某些組件不依賴於你想要的Scala庫版本,但是你不能保證依賴於某些lib的不同版本的組件,當然Scala處於活躍的開發階段,但是如果你堅持與一些斯卡拉圖書館版本和測試很好,直到這個改變你沒事。

但是你不能保證在下一個Scala庫上的一切都會很好,因爲你還有其他組件可能在同一天不同步,對嗎?而且,是的,Scala庫的版本應該匹配所使用的Scala編譯器的版本。

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命令來運行它們每個斯卡拉版本:

> + publish 

這將構建和發佈您的在crossScalaVersions中列出每個Scala版本的項目工件。

查看sbt docs瞭解更多信息。

+0

謝謝。然而,我知道關於交叉版本,我很高興地以2.10放棄了這個版本。如果沒有必要,我認爲將世界上的文物數量增加三到四倍是非常可怕的。 – 2013-06-25 09:24:26

+0

好點。顯然,在2.10版本中,交叉版本只會產生一個2.10.x的神器,但您仍然可以確信自己已經涵蓋了所列出的版本。 – earldouglas 2013-06-25 16:50:35