尝试使用quartz 1.8.3将Java代码作为脚本执行。我正在使用从Apache BSF 3.1版本打包的BSF语言jar。 JVM版本是1.6.0_29。
当它试图评估我得到的脚本时:
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)
我无法确定可能遗漏的内容。
更新:为了使追踪更加困难,这是间歇性的。如果我将作业安排为每小时运行一次,那么该异常可能会失败三次,工作两次,然后再次失败。
答案 0 :(得分:0)
Apache Commons BSF在Java6 +中不再一致
Apache BSF 3.x包含JSR-223(javax.script)的实现 并在Java 1.4和Java 1.5上运行。 (Java 1.6包含javax.script as 标准。)请注意,虽然实现遵循JSR-223 规格,尚未针对JSR-223 TCK进行测试。阿帕奇 因此,BSF 3.x不能严格地描述为兼容的 JSR-223的实施,但据信是完整的。