1

実行時にコンパイルを生成するクラスをロードしようとしています。このコードで問題なくコンパイルできます。

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);

List<File> sourceFileList = new ArrayList<File>();
sourceFileList.add(new File(sourceFile));
Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(sourceFileList);
CompilationTask task = compiler.getTask(null, fileManager, null, null,null, compilationUnits);

しかし、後で使用するためにコンパイルしたクラス (またはコンパイルされた場所) をロードする方法がわかりません。私は次のようないくつかのことを試しました:

Class type = ClassLoader.getSystemClassLoader().loadClass(className);

また

ClassLoader loader = URLClassLoader.newInstance(new URL[] { myUrl }, getClass().getClassLoader());  //(URL?)

成功せずに(私はこれらを理解していません...)。私がそれから開発できるように、私を助けてくれるか、これを行うための簡単な例を挙げていただけますか?

前もって感謝します。

4

2 に答える 2

1

最後の試みはうまくいくはずです。myUrl生成された.classを含むディレクトリ(またはJar)を参照する必要があります。

myUrl = new URL("file:///myGeneratedCode/");

ディレクトリと見なされるには、URLがで終わる必要があり"/"ます。そうでない場合は、Jarファイルと見なされます。

于 2011-08-25T11:33:25.197 に答える
0

私はついに「問題」を見つけました。それは私の側からの愚かな間違いでした:私はそれを閉じる前に生成されたJavaファイルをコンパイルしようとしていました。厄介なのは、JavaCompilerが例外をスローしていなかったことです。

これが解決され、クラスが生成されたので、ClassLoaderでのロードに問題はありません。

再度、感謝します。

于 2011-08-25T20:50:34.443 に答える