我在eclipse环境中使用groovy和java来开发UI应用程序 . 我想在我的代码中使用groovy类加载器,所以我使用传统的方式来获取Groovy类加载器:
def str = new File("C:/myGroovyFile.groovy").getText()
def myclass = getClass();
println myclass //facing issue here
ClassLoader parent = myclass.getClassLoader();
GroovyClassLoader loader = new GroovyClassLoader(parent);
Class groovyClass = loader.parseClass(str);
这里我面临的问题是,在eclipse环境中调用时的getClass()没有返回GroovyCOnsole脚本,而是返回java.lang.class,调用时getClassLoader()返回null .
我想获取getClass()的groovy控制台脚本,这反过来可以用来动态加载位于C:\的groovy文件
请告诉我如何解决这个问题 .
PS:我试图将此代码放在名为initialize()的方法中 . 只要此代码在主类中,它就可以工作,但是当我将上述代码包含在自定义用户定义函数中时,它不起作用 . 为什么会这样?
1 回答
Edit
http://groovy.codehaus.org/Embedding+Groovy
http://groovy.codehaus.org/Class+Loading
http://groovy.codehaus.org/Influencing+class+loading+at+runtime
http://groovy.codehaus.org/api/groovy/lang/GroovyClassLoader.html
既然你能从main获得正确的类加载器,你能不能将loader引用传递给initialize()作为方法参数?
我遇到了一个与Groovlets类似的问题,其中类加载器看起来根据调用它的上下文(即脚本或类范围)而有所不同 . 我的解决方案是使用脚本范围类加载器并将loader ref传递给类范围的应用程序 .
Groovy用户列表在不同时间涵盖了groovy中的类加载主题;显然是所有事情Groovy的一个很好的资源; - )
http://groovy.329449.n5.nabble.com/