动态创建的java源文件在执行时不会刷新

时间:2016-11-30 06:44:50

标签: java

我在程序中创建一个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的内容是由我的程序动态生成的,我看到它正在编译,但是当主方法执行时,它仍然运行上一次运行的代码而不是最新的代码。 请建议修复

0 个答案:

没有答案