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
和
也许还有另一个我不知道的实现.
任何帮助赞赏
在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"来完成此操作.