2012-08-07 63 views
1

我想從scala對象導入並調用一個java類(它來自外部包)。我的代碼是這樣的Scala導入和包錯誤

Java代碼:

package com.test.services.account; 

public class MyMain { 
    public static void main(String[] args) { 
     System.out.println("coming into main"); 
    } 
} 

Scala代碼:

package com.newtest.newservice.scala 
import _root_.com.test.services.account.MyMain 

object scalatest { 
    def main(args: Array[String]) { 
    println("Hello, world! " + args.toList) 
    // Deployer.main(args) 
    val de:MyMain = new MyMain() 
    println(de.toString()) 
    } 
} 

當我使用scalac scalatest.scala編譯它,它給出了一個錯誤

scalatest。 scala:2:error:對象測試不是包com的成員 import root .com.test.ser vices.account.MyMain ^ 找到一個錯誤

任何人都可以指導我如何將我的java類導入到scala代碼中?

感謝 蘇雷什

+1

您確定Java類位於Scala編譯器的類路徑中嗎? (如果你沒有使用它:Sbt簡化了這些東西很多,一般來說是一個不錯的選擇。) – 2012-08-07 09:44:01

回答

1

如果你不想使用類似SBT,你應該先決定你的CLASSPATH的。既然你有兩個不同的類文件(一個是從Java生成的,另一個是從Scala生成的),你至少需要一個目錄,你的類文件需要存在。我們假設這是d:\myclasses

在這種情況下,你會使用這個命令編譯java文件:

d:\mycode> javac -d d:\myclasses MyMain.java 

這將在d:\myclasses產生適當的包結構的Java類文件。然後,你會編譯像這樣

scalac -classpath d:\myclasses -d d:\myclasses scalatest.scala 

而不是通過類路徑作爲scalac命令行的一部分階文件,你還可以設置您CLASSPATH環境變量d:\myclasses

+0

嗨Rajesh,我做到了,但是當我運行斯卡拉班時,我得到了這個除了 – Suresh 2012-08-07 10:33:10

+0

我做到了,當我運行scala類時出錯: C:> scala com \ newtest \ newservice \ scala \ scalatest線程「main」中的異常java.lang.NoClassDefFoundError:com \ newtest \ newservice \ scala \ scalatest(錯誤名稱:com/newtest/newservice/scala/scalatest) scalatest是我的coimplied scala類 任何想法如何解決這個問題? – Suresh 2012-08-07 10:36:54

+1

你又犯了同樣的錯誤。 Scala(也就是JVM)不知道你的類路徑是什麼,所以它不知道在哪裏找到你的類。或者像命令scalac那樣在命令行上傳遞它,或者設置CLASSPATH環境變量。閱讀http://en.wikipedia.org/wiki/Classpath_%28Java%29來了解一下CLASSPATH是什麼,以及它爲什麼重要。 – 2012-08-07 11:08:34