私は、これがうまくいかないという脳死の愚かなことをしなければならないことを知っていますが、実行中のサーバに動作を動的にロードしたい状況にあります。 。私はこれを行うための私のツールとしてグルーヴィーを選んだ。この振る舞いは、私のモデルオブジェクトやFreemarkerのようなサードパーティのライブラリなど、サーバのクラスパス上のクラスを参照する必要があります。Javaに埋め込まれたGroovy
私はこの愚かなPOCを一緒に投げて実行可能性を示しました。 GroovyClassPathの親クラスパスを自分の現在のものに設定しているにもかかわらず、Javaクラス "ThingyDoodle"と "Fooable"を解決するための素晴らしいスクリプトを手に入れることはできません。
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