我在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()的方法中。只要此代码在主类中,它就可以工作,但是当我将上述代码包含在自定义用户定义函数中时,它不起作用。为什么会这样?
答案 0 :(得分: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
既然你能从main获得正确的类加载器,你能不能将loader引用传递给initialize()作为方法参数?
我遇到了与Groovlets类似的问题,其中类加载器看起来根据调用它的上下文(即脚本或类范围)而有所不同。我的解决方案是使用脚本范围类加载器并将loader ref传递给类范围的应用程序。
Groovy用户列表在不同时间涵盖了groovy中的类加载主题;显然是Groovy所有东西的重要资源; - )
http://groovy.329449.n5.nabble.com/