2011-04-27 1 views
5

Làm cách nào để chạy mã scala đã biên dịch trên jvm?Làm thế nào để chạy mã bytecode scala trên jvm?

Khi tôi cố gắng lệnh sau:

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

tôi nhận được lỗi sau: Exception in thread "main" java.lang.NoSuchMethodError: main

Trong mã scala, tôi có một đối tượng được gọi là chính và nó có các chức năng chính được xác định trong đó. Nó hoạt động nếu tôi làm scala -cp bin com.mcmc5.Main , nó hoạt động tốt.

Có điều gì đó mà tôi bị thiếu không?

Cảm ơn bạn, thejinx0r

Edit1: Dưới đây là mã của tôi: Lý do tại sao tôi muốn nó chạy trên JVM là vì máy chủ nơi mà tôi muốn thực sự thực hiện bytecode không có scala Cài đặt. Đây là những gì chính tôi đã cơ bản (nó có một số giá trị và các biến được xác định trước đó, nhưng về cơ bản:.

 
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() 
    } 
} 

Nhưng tôi vẫn cố gắng sử dụng java -cp scala-library.jar:bin com.mcmc5.Main và tôi vẫn có những lỗi tương

Chỉnh sửa 2 vấn đề giải quyết.

vì vậy, tôi thực sự không tin điều này, nhưng hoạt động này đối với tôi.

vì vậy, tôi đã tìm thấy một thread (nếu bạn có thể gọi nó) và nói rằng java thường không thích toàn bộ object Main extends Application Nhưng, điều đó thực sự đã giải quyết được vấn đề của tôi. Bằng cách sử dụng extends Application thay vì xác định một hàm được gọi là chính đã giải quyết được sự cố của tôi. Tôi đoán nó phụ thuộc vào phiên bản của scala bạn đang sử dụng. Tôi hiện đang trên scala 2.9, rc2 có lẽ? hoặc rc1?

+1

sẽ rất thú vị khi xem mã của bạn để giúp bạn – axaluss

+0

Như Ernest đã đề cập: Chỉ tùy chọn -cp cuối cùng mới được sử dụng. Không chỉ định hai! – ziggystar

+0

Với dòng lệnh 'scala -cp bin com.mcmc5.Main', bạn đã chạy mã Scala của bạn trên JVM. Tại sao bạn muốn làm điều đó một cách rõ ràng bằng cách sử dụng lệnh 'java'? – Jesper

Trả lời

10

Trên Windows,

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

hay ở nơi khác

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

Chỉ cần một đơn kết hợp "-cp" tùy chọn. Điều này chắc chắn là cách chính xác, cho rằng com.mcmc5.Main được biên dịch với scalac.