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 必须以 a 结尾"/"才能被视为目录,否则,它将假定为 Jar 文件。

于 2011-08-25T11:33:25.197 回答
0

我终于找到了“问题”。从我的角度来看,这是一个愚蠢的错误:我试图在关闭生成的 java 文件之前对其进行编译。令人讨厌的是 JavaCompiler 没有抛出任何异常。

解决了这个问题并生成了类,我不再有使用 ClassLoader 加载它的问题

再次感谢。

于 2011-08-25T20:50:34.443 回答