我在程序中创建一个java源文件,编译它然后调用新java类的main方法。
private static void compileJavaAndExecute(String path, String file)
throws Exception {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(
diagnostics, null, null);
Iterable<? extends JavaFileObject> compilationUnits = fileManager
.getJavaFileObjectsFromStrings(Arrays.asList(path + "\\" + file
+ ".java"));
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager,
diagnostics, null, null, compilationUnits);
boolean success = task.call();
URLClassLoader classLoader = URLClassLoader
.newInstance(new URL[] { new File("D:\\POC\\VoiceAutomation\\src").toURI().toURL() });
Class.forName("com.test.Test1", true, classLoader)
.getDeclaredMethod("main", new Class[] { String[].class })
.invoke(null, new Object[] { null });
fileManager.close();
System.out.println("Success: " + success);
}
我第一次执行程序时工作正常。现在假设Test1.java的内容是由我的程序动态生成的,我看到它正在编译,但是当主方法执行时,它仍然运行上一次运行的代码而不是最新的代码。 请建议修复