Я пытаюсь загрузить 2 отличных скрипта из удаленного местоположения (скажем, S3).Первый сценарий прост.Он называет пакет ab, а сам файл называется c.dsl.
package a.b;
int i = 10;
public void anotherfunc() {};
private void anotheractivityFunc() { int k = 9;};
Во втором скрипте groovy содержится следующий код (он называется s.dsl)
package c.d;
// Notice the import of the other script file here
import a.b.c;
int i = 10;
c myself;
public void func() {};
private void activityFunc()
{
int k = 9;
c nbn;
};
Этот сценарий пытается создать объект класса, определенного в первом сценарии.Я запускаю это с помощью этого кода
CustomClassLoader loader = new CustomClassLoader(GroovyDSLTest.class.getClassLoader(), configuration);
GroovyShell shell = new GroovyShell(loader, configuration);
Script script = shell.parse(scriptText, "s.dsl");
CustomClassLoader определяется с помощью этой функции
public Class loadClass(name, ...)
{
try
{
return super.loadClass(name, lookupScriptFiles, preferClassOverScript, resolve);
}
catch (ClassNotFoundException e)
{
if (name.equals("a.b.c"))
// Notice how I handle the import a.b.c from the second groovy file
return parseClass(<text from c.dsl>, "c.dsl");
throw e;
}
}
Я получаю ошибку компиляции, когда я делаю это.Он загружает файл abc чисто.Но когда я пытаюсь создать переменную-член "c", это терпит неудачу.
s.dsl: 1: [Static type checking] - The variable [myself] is undeclared.
@ line 8, column 3.
c myself;
^
s.dsl: 1: [Static type checking] - Cannot find matching method c.d.s#c(java.lang.Object). Please check if the declared type is right and if the method exists.
@ line 8, column 1.
c myself;
^
Почему он не может найти c?Я смог напечатать загрузчик классов, так как он загружает классы, и он загрузил abc. Изменение вышеприведенного кода на использование abc вместо простого «c» также не работает.Как называется класс, который groovy генерирует из файла сценария.Я хочу иметь доступ к этому классу и создавать его объекты.