2011-04-27 69 views
5

如何在jvm上運行編譯後的scala代碼?如何在jvm上運行scala字節碼?

當我嘗試使用以下命令:

java -cp scala-library.jar -cp bin com.mcmc5.Main

我收到以下錯誤: Exception in thread "main" java.lang.NoSuchMethodError: main

在Scala代碼,我有一個叫做主要對象並將其定義的主要功能在那裏。它工作,如果我做 scala -cp bin com.mcmc5.Main ,它工作正常。

有什麼,我失蹤?

謝謝 thejinx0r

EDIT1: 這裏是我的代碼: 爲什麼我希望它運行在JVM上的原因是因爲我想要去實際執行的字節碼沒有階服務器安裝。這是我的主要有本質(它有一定的價值和之前定義的變量,但本質:

 
package com.mcmc5 
import java.text.{DateFormat, NumberFormat, DecimalFormat, SimpleDateFormat} 
import java.util.{Date} 
object Main { def main(args: Array[String]) = { 
     println(numberOfOutputStructures) 
     var structureSolver = new MC(20); 
     structureSolver.start() 
    } 
} 

但我仍然使用 java -cp scala-library.jar:bin com.mcmc5.Main試過,我仍然得到了同樣的錯誤

編輯2 問題解決了。

所以我其實不相信這一點,但是這對我的作品。

於是我找到了一個thread (如果你可以稱之爲),並說java通常不喜歡整個object Main extends Application 但是,這實際上解決了我的問題。通過使用extends Application而不是定義一個名爲main的函數來解決我的問題。我想這取決於你正在使用的scala版本。我目前在scala 2.9上,也許是rc2?或rc1?

+1

很高興看到你的代碼來幫助你 – axaluss 2011-04-27 01:54:51

+0

正如歐內斯特所說:只有最後的-cp選項將被使用。不要指定兩個! – ziggystar 2011-04-27 06:45:50

+0

使用命令行'scala -cp bin com.mcmc5.Main',您已經在JVM上運行您的Scala代碼。你爲什麼要用'java'命令明確地做到這一點? – Jesper 2011-04-27 13:33:49

回答

10

在Windows上,

java -cp scala-library.jar;bin com.mcmc5.Main 

或其他地方

java -cp scala-library.jar:bin com.mcmc5.Main 

只是一個單一的聯合 「-cp」 選項。鑑於com.mcmc5.Main編譯爲scalac,這絕對是正確的方法。