2011-05-23 61 views
0

我在eclipse环境中使用groovy和java来开发UI应用程序。我想我的代码中使用Groovy类加载器,所以我使用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); 

在这里,我所面临的问题是的getClass()被调用时在eclipse环境中不返回GroovyCOnsole脚本,而是返回调用时返回null的getClassLoader()时返回的java.lang.class。

我想要得到的getClass常规控制台脚本的保持(),这反过来又可以动态加载我位于C常规文件有用:\

请告诉我,我怎么能解决这个问题。我试图把这个代码放在一个名为initialize()的方法中。只要此代码位于主类中,它就可以工作,但是当我将上述代码放在自定义用户定义的函数中时,它不起作用。为什么这样?

回答

2

编辑
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

既然你能够从主得到正确的类加载器,你能不能通过装载机参考初始化()的方法PARAM ?

我遇到了类似Groovlets的问题,类装载器根据调用的上下文(即脚本或类作用域)而显示不同。对我来说,解决方案是采用脚本作用域类加载器,并将加载器引用传递给类作用域应用程序。 Groovy用户列表已经涵盖了groovy在不同时间的类加载的主题;显然是Groovy所有东西的一个很好的资源; - )
http://groovy.329449.n5.nabble.com/

+0

非常感谢!到目前为止,我已经通过了自定义方法的引用,但我实际上很想知道为什么我不能在单独的方法中进行类加载。这个问题的目的是为了得到同样的答案:) – 2011-05-24 05:30:28

+0

如果你还没有这样做,请检查我上面编辑的四个链接,或者发布到Groovy用户列表中,Jochen,Guillaume(Groovy的核心开发人员)或其他Groovy“重”会为你解答: – virtualeyes 2011-05-24 07:56:30