如何使用scala作为脚本语言设置jsr223脚本

Viv*_*ivo 7 java scala scripting-language jsr223

到目前为止,我已经为scala尝试了jsr223脚本的sling实现,但是无法正确设置它.当我这样做:

public static void main(String[] args) {
    try {
        new ScriptEngineManager().getEngineByName("scala").
          eval("object HelloWorld {def main(args: Array[String]) { 
                  println(\"Hello, world!\") }}");
    } catch (ScriptException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

我什么也没得到:

javax.script.ScriptException: ERROR 
org.apache.sling.scripting.scala.Script line 13 : not found: type 
Script at org.apache.sling.scripting.scala.ScalaScriptEngine.eval(ScalaScriptEngine.scala:117)
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247)
Run Code Online (Sandbox Code Playgroud)

类似的问题在这里讨论:http: //scala-programming-language.1934581.n4.nabble.com/How-to-compile-Scala-code-from-java-using-the-current-ClassLoader-instead-of-一个字符串为基础,classpat-td1955873.html#a1955873

http://dev.day.com/discussion-groups/content/lists/sling-dev/2009-12/2009-12-01_Scala_scripting_support_was_Re_And_another_one____Michael_D_rig.html

也许还有另一个我不知道的实现.

任何帮助赞赏

mic*_*hid 6

Apache Sling的scala/script模块中查看测试用例以获取一个工作示例.脚本及其入口点(即对象)需要遵循某些约定.如果以后需要,我会提供更多相关信息.

有关脚本引擎的一般概述,请参阅Scala Days 2010中的会话幻灯片.

更新:脚本必须采用以下格式:

package my.cool.script {
  class foo(args: fooArgs) {
    import args._ // import the bindings
    println("bar:" + bar)
  }
}
Run Code Online (Sandbox Code Playgroud)

该类型args由脚本引擎产生的,并与"参数数量"追加剧本的简单类的名称命名.此外,该示例假定,为脚本评估传递的Bindings包含名称"bar"的值.有关详细信息,请参阅课程评论ScalaScriptEngine.

您需要将脚本类的名称传递给脚本引擎.您可以通过将完全限定的脚本名称(即my.cool.script.foo)放入ScriptContext名称"scala.script.class"来完成此操作.