2014-10-09 72 views
0

试图使用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) 

我茫然地确定什么可能会丢失。

更新:为了使这更难追查,这是间歇性的。如果我将作业安排为每小时运行一次,则可能会因该异常而失败三次,然后执行两次,然后再次失败。

+0

可能重复[如何当我使用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

+0

@bigGuy不是一个笨蛋。该问题询问如何使用该API,它无法找到该API。 – JasonMArcher 2014-10-09 20:55:14

回答

0

阿帕奇百科全书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的兼容 实现,但它被认为是完整的。

报价从Apache website

+0

我没有使用BSF API。我使用Java 1.6中的javax.script。我确实使用BSF 3.1中的机器来下载和组装一个装满第三方脚本引擎的jar。 – user2458080 2014-10-13 17:37:07