Расширенный GroovyClassloader и метод переопределения loadclass
Если я сделаю lookupScriptFiles
"true
" в методе loadClass()
, сценарий запустится и не потребует оператора импорта, ссылающегося на класс groovy в другомpackage
Я расширил GroovyClassloader и переопределил метод loadclass, в loadclass аргумент lookupScriptFiles =true
Когда это так, он успешно компилируется, даже если first.groovy не имеет оператора import
когда lookupScriptFiles=false
выдает ошибку компиляции, как и ожидалось.
my source code snippet
C:\>cat first.groovy
def cos=new Second()
==============================================================
C:>cat Second.groovy
package com.test
class Second
{
Second()
{
println "Anish"
}
}
=========================================================
C:\bin>echo %CLASSPATH%
C:\zGroovy\bin;C:\vsexclude\opt\groovy-1.7.2\embeddable\groovy-all-1.7.2.jar
===============================================
C:\vsexclude\trees\bac-4.2\workspace\zGroovy\bin>java GCtest
path------>>C:\first.groovy
Anish
=================================
import groovy.lang.GroovyClassLoader;
import org.codehaus.groovy.control.CompilationFailedException;
import org.codehaus.groovy.control.CompilerConfiguration;
/**
* @author Anish
*/
public class GCloader extends GroovyClassLoader {
public GCloader(ClassLoader parent) {
super(parent, new CompilerConfiguration());
}
@Override
public Class<?> loadClass(final String name, boolean lookupScriptFiles,
boolean preferClassOverScript, boolean resolve)
throws ClassNotFoundException, CompilationFailedException {
//return loadFiles(name, true, preferClassOverScript, resolve);
return super.loadClass(name, true,
preferClassOverScript, resolve);
}
}