Я хочу использовать отражение, чтобы получить все методы только что созданного класса Java. Как и я, я создал класс java, скопировав его из другого файла, затем я использую JavaCompiler для компиляции вновь созданной Java. Но я не знаю, почему файл целевого класса не был создан. PS: Если я задаю неправильный путь к файлу java-файла, будет компилироваться информация, подобная "javac: cannot find file: codeGenerator/Service.java"
. Спасибо вам всем.JavaCompiler на самом деле не компилировал класс
private static Method[] createClassAndGetMethods(String sourceFilePath) throws IOException {
File targetFile = new File("Service.java");
File sourceFile = new File(sourceFilePath);
Files.copy(sourceFile, targetFile);
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, targetFile);
Thread.sleep(5000);
//After the Service.java compiled, use the class getDeclaredMethods() method.
Method[] declaredMethods = Service.class.getDeclaredMethods();
return declaredMethods;
}
метод компиляции:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, targetFile);
'Метод [] объявленMethods = Class.forName (" codeGenerator.Service "). GetDeclaredMethods();' Если я использую его таким образом, я все равно не могу получить правильный вывод. Дело в том, что класс не был составлен. – leo
@EJP Четкий ответ действительно должен быть одобрен. –
@leo См. Здесь [здесь] (http://stackoverflow.com/questions/7989135/is-it-possible-to-programmatically-compile-java-source-code-in-memory-only). – EJP