2011-09-13 70 views
1

我有一個grails應用程序負責運行上傳的groovy文件。然後,我的應用程序查找上傳的groovy文件,然後使用GroovyShell執行它們。Grails中的Groovy Shell包含我的grails .lib /文件夾

好像我的grails lib文件夾中包含的任何.jar文件也被添加到我的GroovyShell的類路徑中(這對我不好)。有沒有辦法得到一個'乾淨'的類路徑,包括沒有外部引用?

例子:

MyGrailsApp/lib/my-java-code.jar 

my-java-code.jar含有一種叫com.ClassInExternalLib

GroovyService{ 

    def runTask(){ 
     GroovyShell shell = new GroovyShell() 
     shell.evaluate("assert new com.ClassInExternalLib() != null") 

    } 

} 

回答

3

簡單的類加載器設置爲僅包含要暴露給GroovyShell當你構建GroovyShell庫的ClassLoader類。有關更多信息,請參閱Groovy API documentation

+0

感謝您的回覆。你推薦什麼樣的類加載器?我應該使用空的URLClassLoader嗎?除了核心groovy之外,我不想要任何外部參考。 –

+0

@Michael J. Lee:DZone的這篇文章講述瞭如何獲得一個空的ClassLoader。它還指出,如果你想公開核心Groovy,你將需要在構建ClassLoader時包含它。 http://groovy.dzone.com/news/class-loading-fun-groovy –