4

ファイル システムに 1 つ以上の .class ファイルを生成した Groovyc を使用して Groovy スクリプトをコンパイルしたとします。Java アプリケーションから、これらのクラスをクラスパスに動的に追加して、クラスをロードしてメソッドを呼び出すにはどうすればよいですか? 目標は、Groovy スクリプトをプリコンパイルしてデータベースに保存することです。これにより、スクリプトのコンパイル済みバージョンから評価を実行できます。

4

2 に答える 2

11

URLClassLoaderのインスタンスを作成して、ディレクトリから新しいクラスをロードできます。

URL dirUrl = new URL("file:/" + "path_to_dir" + "/");             // 1
URLClassLoader cl = new URLClassLoader(new URL[] {dirUrl},
                             getClass().class.getClassLoader());  // 2
Class loadedClass = cl.loadClass("com.xyz.MyClass");
MyClass obj = (MyClass) loadedClass.newInstance();
obj.doSomething();

1行URL目は、.classファイルが存在するディレクトリにを作成します。

2行目は新しいURLClassLoaderインスタンスを作成します。最初の引数は、ソースとして使用されるURLの配列です。アレイ内で複数のディレクトリURLを指定できます。2番目の引数は、この新しいクラスローダーの親になるクラスローダーです。上記のコードを実行するクラスのクラスローダーをこの引数として渡します。

子クラスローダーによってロードされたクラスは、親クラスローダーによってロードされたクラスにアクセスできます。

于 2010-07-28T02:38:44.387 に答える
1

独自のクラスローダーを作成する必要があります。

このjavadoc リンクには、カスタムのものを定義する方法の例があります。

于 2010-07-28T00:32:37.470 に答える