2013-10-16 59 views
0

我正在使用GroovyConsole來評估從外部源獲得的腳本。所以要評估的代碼是動態的,我無法控制它。實際上寫入到數據庫中,我必須將其作爲字符串讀取。不完美,但事情就是這樣。評估GroovyShell中的大型Groovy腳本

我在做什麼現在:

private GroovyShell shell 

def processScript(def script){ 
    if (script) { 
     try{ 
      shell.evaluate (script, 'some_random_name') 
     }catch(e){ 
      log.warn "Could not process script: $e" 
     } 
    } 
} 

這通常工作。但是現在我們得到了一個很大的腳本(~3000 LOC),因爲腳本大於64K,所以它會拋出java.lang.RuntimeException: Method code too large!

我試圖將腳本轉儲到文件並使用BufferedReader,但它引發了相同的異常。

那麼有沒有更好的方法來評估Groovy方法中的動態Groovy代碼?

回答

1

問題是你的腳本達到了方法的java限制。我認爲唯一的解決方案是以某種方式在許多腳本中分割你的腳本。 See this answer

+0

正如我提到的問題:我在劇本沒有控制,我把它從外部來源 – moeTi

+1

@moeTi我不覺得有什麼,如果你不能改變腳本,你可以做,這是一個JVM對方法大小的限制,並且這個腳本進入基於Groovy'Script'類的'run'方法基類 –

+0

那麼你可以在從外部源讀取腳本後自動分割腳本。我認爲這並不容易,蝙蝠因爲Java的內在限制而沒有看到任何其他解決方案。 –