GroovyClassloader の拡張と loadclass メソッドのオーバーライド
lookupScriptFiles
メソッドで" true
"を作成loadClass()
すると、スクリプトが実行され、別のパッケージの Groovy クラスを参照する import ステートメントは必要ありません。
GroovyClassloader を拡張し、loadclass メソッドをオーバーライドし、loadclass で引数lookupScriptFiles =true
これが真の場合、最初でも正常にコンパイルされます。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);
}
}