После упаковки в банку скала приложение не работает - PullRequest
0 голосов
/ 11 декабря 2011

У меня есть этот код (scala 2.9.1):

package pl.koziolekweb.scala.dsi
import scala.tools.nsc.interpreter.{ IMain, Results }

trait Eval {

  def eval(expresion: String): Option[Any] = {
    val interpreter = new IMain {
      override protected def parentClassLoader: ClassLoader = App.getClass.getClassLoader
    }
    val res = new ResultSet
    interpreter.beQuietDuring {
      interpreter.bind("res", res.getClass.getCanonicalName, res)
      interpreter.interpret("res.value = " + expresion)
    } match {
      case Results.Success => Option(res.value)
      case _ => None;
    }

  }
}


object App extends Eval {

  def main(args: Array[String]) {
    { eval(args(0)) } match {
      case None => println("nie bangla")
      case Some(x) => println(x)
    }
  }

}

class ResultSet {

  var value : Any  = null

}

, когда я компилирую его (maven) и запускаю просто вызов:

scala pl.koziolekweb.scala.dsi.App 1+1 

программа отлично работает (печать 2).Но после того, как упаковать все файлы классов в jar и попытаться запустить

scala myapp.jar 1+1

, я получу

<console>:5: error: not found: value pl
  var value: pl.koziolekweb.scala.dsi.ResultSet = _
             ^
<console>:6: error: not found: value pl
  def set(x: Any) = value = x.asInstanceOf[pl.koziolekweb.scala.dsi.ResultSet]
                                           ^
<console>:7: error: not found: value res
       res.value = 1+1
       ^
nie bangla

Почему?какие-либо предложения?

// edit:

Я нахожу причину.у интерпретатора нет myapp.jar в пути к классам.Как загрузить эту банку в IMain?

1 Ответ

1 голос
/ 11 декабря 2011

Поскольку ваше имя пользователя - Koziolek, а ошибочный идентификатор - pl.koziolekweb.scala.dsi.ResultSet, это должно быть что-то в вашей ответственности.

Я не вижу импорта для ResultSet, поэтому я предполагаю, что pl.koziolekweb.scala.dsi - это пакет приложений и Eval.Но я не вижу декларации пакета.

Но вы называете это с

scala my.pack.App 1+1 

Это упрощение для нас?Но это противоречит сообщению об ошибке, поэтому это не упрощение, а источник путаницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...