2013-05-12 72 views
9

我GOOGLE了很多,現在完全卡住了。我知道,也有類似的問題,但請仔細閱讀。我嘗試了所有建議的解決方案,但都沒有工作。scala.tools.nsc.IMain Play 2.1內

我試圖在Play 2.1項目(使用Scala 2.10.0)中使用類scala.tools.nsc

控制器代碼

這是代碼,在那裏我嘗試在WebSocket的使用IMain。這僅用於測試。

object Scala extends Controller { 
    def session = WebSocket.using[String] { request => 
    val interpreter = new IMain() 
    val (out,channel) = Concurrent.broadcast[String] 
    val in = Iteratee.foreach[String]{ code => 
     interpreter.interpret(code) match { 
     case Results.Error =>  channel.push("error") 
     case Results.Incomplete => channel.push("incomplete") 
     case Results.Success => channel.push("success") 
     }  
    } 
    (in,out) 
    } 
} 

當某些東西被過度WebSocket的發送下面的錯誤得到由播放記錄:

Failed to initialize compiler: object scala.runtime in compiler mirror not found. 
** Note that as of 2.8 scala does not assume use of the java classpath. 
** For the old behavior pass -usejavacp to scala, or if using a Settings 
** object programatically, settings.usejavacp.value = true. 

Build.scala

object ApplicationBuild extends Build { 
    val appName   = "escalator" 
    val appVersion  = "1.0-SNAPSHOT" 

    val appDependencies = Seq(
    "org.scala-lang" % "scala-compiler" % "2.10.0" 
) 

    val main = play.Project(appName, appVersion, appDependencies).settings( 
) 
} 

我至今嘗試過

這一切都沒有工作:

我不知道現在該做什麼。

+0

你嘗試過簡單的東西一樣(新scala.tools.nsc.interpreter.IMain())。解釋( 「VAL X = 1」)匹配... – Iraklis 2013-05-12 20:40:30

+0

@Iraklis肯定。我把它放在Global.scala的初始化代碼中。相同的錯誤消息。 – 2013-05-12 20:47:12

+0

你可能也想看看我的答案[這裏](http://stackoverflow.com/a/23925201/3686016)關於這個問題。 – Aniket 2014-05-29 03:28:20

回答

3

這裏的問題是,sbt不會將scala-library添加到類路徑中。 以下解決方法有效。 首先建立在頂級項目目錄的文件夾LIB(應用程序的父,CONF等)和複製有階,library.jar

然後你可以用下面的代碼主辦的解釋:

 val settings = new Settings 
     settings.bootclasspath.value +=scala.tools.util.PathResolver.Environment.javaBootClassPath + File.pathSeparator + "lib/scala-library.jar" 
     val in = new IMain(settings){ 
      override protected def parentClassLoader = settings.getClass.getClassLoader() 
     } 
    val res = in.interpret("val x = 1") 

上面通過向java類添加scala庫來創建bootclasspath。它不是來自sbt的播放框架問題。與sbt一起運行時,任何scala項目都會出現同樣的問題。測試一個簡單的項目。當它從eclipse運行時,它的工作正常。

編輯Link to sample project demonstrating the above.`

+0

不適合我。現在錯誤消息從'scala.runtime'改爲'scala.annotation.Annotation' ...但仍然是同樣的問題。 – 2013-05-13 08:00:12

+1

你可能還沒有複製正確的scala-library.jar。如果你想我不能給你我使用的項目。 – Iraklis 2013-05-13 08:05:36

+0

我使用了2.10.0 scala庫。那將是真棒。你可以在我的個人資料中找到我的郵件地址。 – 2013-05-13 08:06:28

-1

不知是否反映罐子丟失。嘗試在appDependencies中添加這個。

"org.scala-lang" % "scala-reflect" % "2.10.0" 
+0

不幸的是,這並沒有幫助...... :( – 2013-05-13 07:10:21