我知道我錯過了一些基本的東西。我試圖動態編譯一個類,然後在更改後重新加載它。以下代碼有效。但是,當我調用它兩次(更改.java後一次),類定義不會更新。我錯過了什麼?爲什麼我的課沒有重新加載?
File file = new File("/eraseme/Eraseme.java");
File[] files = new File[] {file};
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjects(files);
CompilationTask task = compiler.getTask(null, fileManager, null, null,null,compilationUnits);
boolean madeIt = task.call(); // works
File classFile = new File("/eraseme/Eraseme.class");
URL url = classFile.toURL();
URL[] urls = new URL[] { url };
ClassLoader cl = new URLClassLoader(urls);
Class cls = cl.loadClass("Eraseme");
TestApi test = (TestApi) cls.newInstance();
System.out.println(test.getVersion());
的類加載器實際上沒有被莫名其妙地使用。即使我沒有爲.class輸入正確的文件名,它仍然會運行。 – 2009-12-25 18:53:19