2012-06-22 30 views
2

我執行Groovy腳本在Java:如何獲得Groovy腳本的輸出在java中

final GroovyClassLoader classLoader = new GroovyClassLoader(); 
Class groovy = classLoader.parseClass(new File("script.groovy")); 
GroovyObject groovyObj = (GroovyObject) groovy.newInstance(); 
groovyObj.invokeMethod("main", null); 

這主要println方法,我想在一些變量來保存一些信息。我該怎麼做 ?

回答

2

你將不得不到System.out重定向到別的東西..

當然,如果這是多線程的,你會打的問題

final GroovyClassLoader classLoader = new GroovyClassLoader(); 
Class groovy = classLoader.parseClass(new File("script.groovy")); 
GroovyObject groovyObj = (GroovyObject) groovy.newInstance(); 

ByteArrayOutputStream buffer = new ByteArrayOutputStream() ; 
PrintStream saveSystemOut = System.out ; 
System.setOut(new PrintStream(buffer)) ; 

groovyObj.invokeMethod("main", null); 

System.setOut(saveSystemOut) ; 
String output = buffer.toString().trim() ; 

它可能會更好(如果你可以)寫我們的腳本,讓他們返回一些東西,而不是轉儲到system.out

+0

thx很多工作。我要使用這種方法,但我可以重寫groovy腳本 – hudi

+1

@hudi:你在[另一個問題](http://stackoverflow.com/questions/11737904)中提到,這段代碼運行在一個webapp中。正如Tim指出的那樣,**這在多線程環境中不起作用。而webapps本質上是多線程的。如果你自己測試它,似乎可行,但只要你有兩個人在同一時間提出請求,輸出就會被嚴重破壞。 –

+0

這個應用程序應該只使用admin =一個人,但thx警告 – hudi

相關問題