com.sun.script.java.JavaCompiler调用不存在的方法
问题描述:
试图使用quartz 1.8.3作为脚本执行Java代码。我正在使用从Apache BSF 3.1版本打包的BSF语言罐。 JVM版本是1.6.0_29。com.sun.script.java.JavaCompiler调用不存在的方法
当它试图评估该脚本,我得到:
java.lang.NoSuchMethodError: javax.tools.JavaCompiler.getTask(Ljava/io/Writer;Ljavax/tools/JavaFileManager;Ljavax/tools/DiagnosticListener;Lnet/sourceforge/retroweaver/runtime/java/lang/Iterable;Lnet/sourceforge/retroweaver/runtime/java/lang/Iterable;Lnet/sourceforge/retroweaver/runtime/java/lang/Iterable;)Ljavax/tools/JavaCompiler$CompilationTask;
at com.sun.script.java.JavaCompiler.compile(JavaCompiler.java:105)
at com.sun.script.java.JavaScriptEngine.parse(JavaScriptEngine.java:114)
at com.sun.script.java.JavaScriptEngine.eval(JavaScriptEngine.java:81)
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247)
at foo.quartzutils.ScriptJob.evalScript(ScriptJob.java:106)
at foo.quartzutils.ScriptJob.execute(ScriptJob.java:54)
at org.quartz.core.JobRunShell.run(JobRunShell.java:216)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
我茫然地确定什么可能会丢失。
更新:为了使这更难追查,这是间歇性的。如果我将作业安排为每小时运行一次,则可能会因该异常而失败三次,然后执行两次,然后再次失败。
答
阿帕奇百科全书BSF不再是一致的Java6 +
的的Apache BSF 3.X包括JSR-223(javax.script中) 的实施和运行于Java 1.4和Java 1.5。 (Java 1.6包含javax.script,标准为 )。请注意,虽然该实现遵循JSR-223 规范,但尚未针对JSR-223 TCK进行测试。因此,BSF 3.x不能严格描述为JSR-223的兼容 实现,但它被认为是完整的。
+0
我没有使用BSF API。我使用Java 1.6中的javax.script。我确实使用BSF 3.1中的机器来下载和组装一个装满第三方脚本引擎的jar。 – user2458080 2014-10-13 17:37:07
可能重复[如何当我使用javax.tools.JavaCompiler编译源设置CLASSPATH?](http://stackoverflow.com/questions/1563909/how-to- set-classpath-when-i-use-javax-tools-javacompiler-compile-the-source) – bigGuy 2014-10-09 20:26:18
@bigGuy不是一个笨蛋。该问题询问如何使用该API,它无法找到该API。 – JasonMArcher 2014-10-09 20:55:14