2015-06-02 121 views
1

這是我用scala編寫的代碼。無法運行從scala文件創建的jar文件

object Main extends App { 
    println("Hello World from Scala!") 
} 

這是我build.sbt

name := "hello-world" 
version := "1.0" 
scalaVersion := "2.11.5" 
mainClass := Some("Main") 

這是我運行創建jar文件的命令。

sbt package 

問題:命名HELLO-world_2.11-1.0.jar JAR文件時,在目標/斯卡拉2.11被創建。但我無法運行該文件。它給我一個錯誤,說NoClassDefFoundError

問題:我做錯了什麼?我希望我已經明確提出了我的問題。如果有一些困惑,那麼請問。提前致謝。

回答

3

它也說什麼類沒有找到。最有可能你不包括scala-library.jar。如果您從命令行獲得Scala 2.11或java -cp "<path to scala-library.jar>:target/scala-2.11/hello-world_2.11-1.0.jar" Main(在Windows上使用;而不是:),則可以運行scala target/scala-2.11/hello-world_2.11-1.0.jar

+0

我可以成功運行第一個命令 –

+0

我已經在根文件夾中複製了scala-library.jar。所以現在我試圖運行下面的命令'java -cp scala-library.jar -jar target/scala-2.11/hello-world_2.11-1.0.jar'。我收到了同樣的錯誤。 –

+1

對不起,它應該是'java -cp「scala-library.jar:target/scala-2.11/hello-world_2.11-1.0.jar」Main「(請參閱http://stackoverflow.com/a/15930980/9204 ,在Windows上使用';'而不是':')。 –

1

描述的過程證明了jar文件執行的方式是有效的。從target/scala-2.11嘗試

scala hello-world_2.11-1.0.jar 

檢查運行它無論是從與sbt run項目的根文件夾也可運行。

0

要運行的jar文件(包含階代碼)與多個主類使用以下方法

scala -cp "<jar-file>.jar;<other-dependencies>.jar" com.xyz.abc.TestApp 

該命令將照顧包括撫養階-library.jar的和也將識別TestApp作爲主要類如果它有一個def main(args:Array[String])方法。請注意多個jar文件應該用分號分隔(「;」)