2

现在,我使用 scala 开发了一个 eclipse 插件。

在这个插件中,我想使用由 twitter 创建的 util-eval 库。

(https://github.com/twitter/util/tree/master/util-eval)

我尝试使用 'sbteclipse' 构建这个库,得到了 jars(例如 util-core-5.3.13.jar 和 util-eval-5.3.13),并添加了以下构建路径:

<classpathentry exported="true" kind="lib" path="jars/util-core-5.3.13.jar"/>
<classpathentry exported="true" kind="lib" path="jars/util-eval-5.3.13.jar"/>

这是一个示例测试代码:

class SampleTest {
@Test
def evalTest(): Unit = {
    val ret = (new com.twitter.util.Eval).apply[(Int => Int)]("{(x:Int) => x*2}")
    println(ret(4))
}

}

当以 Run -> JUnit Test 运行时,它可以工作(显示“8”)

但是,当作为 Run -> EclipseApplication -> (execute plugin) 运行时,它不起作用并且我遇到了一些错误。这是一个插件(处理程序)代码:

class SampleHandler extends AbstractHandler{
def execute(event: ExecutionEvent): Object = {
    val ret = (new com.twitter.util.Eval).apply[(Int => Int)]("{(x:Int) => x*2}")
    println(ret(4))
            return null:
}
 }

这是一条错误消息:

java.lang.RuntimeException: Unable lo load scala interpreter from classpath (scala-compiler jar is missing?)
at com.twitter.util.Eval.liftedTree1$1(Eval.scala:77)
at com.twitter.util.Eval.com$twitter$util$Eval$$compilerPath(Eval.scala:73)
at com.twitter.util.Eval$StringCompiler.<init>(Eval.scala:429)
at com.twitter.util.Eval.compiler(Eval.scala:110)
at com.twitter.util.Eval.compile(Eval.scala:219)
at evaltest.handlers.SampleHandler.execute(SampleHandler.scala:25)

我收到了其他一些以“红色”字体显示的错误消息:

when processing type mungers evaltest.handlers.SampleHandler
when processing type mungers 
when weaving 
[Xlint:cantFindType]
[eval_test_plugin] error can't determine modifiers of missing type    
org.eclipse.jdt.ui.SharedASTProvider$WAIT_FLAG
when processing type mungers evaltest.handlers.SampleHandler
when processing type mungers 
when weaving 
...

简单地说,我想创建一个插件来解释从插件用户输入的 scala 脚本并执行该脚本。为了实现这一点,“评估”功能是必不可少的。

所以,请让我知道一些解决方案。

4

1 回答 1

0

检查您的文件中是否依赖于org.scala-ide.scala.compilerunder 。Require-BundleMANIFEST.MF

于 2012-11-12T07:52:58.017 回答