Я знаю, что я должен делать что-то просто мертвое, глупое, чтобы это не сработало, но я в ситуации, когда хочу динамически загружать поведение в работающий сервер , Я выбрал отличный инструмент для этого. Поведение должно будет ссылаться на классы на пути к классу сервера, такие как мои объекты модели, а также сторонние библиотеки, такие как Freemarker.Groovy, встроенный в Java, перезвонив на Java
Я бросил вместе этот глупый POC, чтобы показать выполнимость. Я не могу заставить groovy-скрипт разрешать классы Java «ThingyDoodle» и «Fooable», несмотря на то, что я устанавливаю родительский путь класса GroovyClassPath как текущий.
public class GroovyTest
{
public static void main (String [ ] argv) throws Throwable
{
// Setting parent classloader!
// also tried plain old "GroovyTest.class.getClassLoader()" as well
GroovyClassLoader gcl = new GroovyClassLoader (Thread.currentThread().getContextClassLoader()) ;
String src =
"class Arf implements Fooable {
public String foo () {
return new ThingyDoodle().doStuff('Arf');}}" ;
Class clazz = gcl.parseClass(src, "AppleSauce.groovy");
Object aScript = clazz.newInstance();
Fooable myObject = (Fooable) aScript;
System.out.println (myObject.foo()) ;
}
public static interface Fooable { public String foo () ; }
public static class ThingyDoodle
{
public String doStuff (String input)
{
return "Hi Worlds" ;
}
}
}
Что, черт возьми, я делаю неправильно здесь?
Exception in thread "main" org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
AppleSauce.groovy: 1: unable to resolve class Fooable
@ line 1, column 1.
class Arf implements Fooable { public String foo () { return new ThingyDoodle().doStuff('Arf');}}
^
AppleSauce.groovy: 1: unable to resolve class ThingyDoodle
@ line 1, column 63.
ublic String foo () { return new Thingy
^
Хорошо, это было неловко :) – billmill
Спасибо! Это то, что мне нужно. – billmill
Не потейте. Я преуспел в том, чтобы придираться к [ошибкам] в других, но слепым к моим собственным [ошибкам] .... :) – Nicholas