2016-07-19 87 views
0

我的SBT編譯在編譯時失敗。 我有以下build.sbt由於找不到scala jar dependecies而導致SBT編譯失敗

name := "Tetst Advice Project" 
version := "1.0" 
scalaVersion := "2.10.6" 

而且我確實有這個:

~\.sbt\boot\scala-2.10.6 

所以顯然我有斯卡拉正確版本的安裝我的SBT。我的SBT版本是0.13

當試圖編譯代碼,我得到這個錯誤:

[error] bad symbolic reference. A signature in [x].class refers to term runtime 
[error] in package scala.reflect which is not available. 

什麼,在我看來就是SBT構建不拿起斯卡拉庫。

請注意,我所有的依賴項罐被放置在lib文件夾下,並且我沒有使用libraryDependencies下載它們。

什麼可能會出錯?

回答

0

您需要驗證Scala版本,您實際上包含了特定的東西,您在x.class中引用的東西。沒有這個代碼,我不能說你想要利用什麼,但是使用scala.util.Properties.scalaPropOrElse("version.number", "unknown")來確定哪個版本的Scala是實際上是被使用。使用println或日誌記錄來輸出該調用的結果。

然後將該版本號引用到Scala API並確認您要撥打的電話號碼實際上是。沒有更多的信息,我無法直接回答你。但是你需要確認你的運行時代碼使用的Scala版本確實包含了你正在嘗試引用的對象或類。

請注意,只需在.sbt目錄中擁有一個Scala目錄並不能保證它正在使用該版本。爲了驗證SBT斯卡拉版本,把這個在你build.sbt文件的底部:

val x = { 
    println("Scala version: " + scala.util.Properties.scalaPropOrElse("version.number", "unknown")) 
    Seq("") 
} 

這將顯示什麼斯卡拉版本你實際使用的SBT文件。這可能不一定是.sbt中的2.10.6

+0

當我動態下載依賴關係時,它工作正常。我想把所有的靜態依賴放在一個lib文件夾下是一個挑戰。 –

+0

也許我錯過了一些東西:特別是需要下載哪些依賴來解決您的問題?你可以有一些託管和一些非託管的依賴關係。前者更容易處理。 –

+0

我得到的問題是在編譯期間沒有找到包scala.reflect。 在我的lib文件夾中,我有一些需要scala庫的jar。我認爲,因爲scala庫是scala安裝的一部分,所以編譯任務總會找到它們。 當這沒有工作,我只是使用libraryDependencies來下載我的依賴關係,它下載所有和編譯工作正常。 我仍然認爲,如果你需要提供靜態依賴關係,編譯任務應該至少找到scala的,而不是讓我們將它們添加到lib文件夾。 –

相關問題