2014-10-09 78 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