JavaCompiler из JDK 1.6: как записать байты класса непосредственно в массив byte []?
Итак, я недавно узнал о новомAPI JavaCompiler доступно в JDK 1.6. Это делает его очень простым для компиляцииString
к.class
файл напрямую из запущенного кода:
String className = "Foo";
String sourceCode = "...";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
List<JavaSourceFromString> unitsToCompile = new ArrayList<JavaSourceFromString>()
{{
add(new JavaSourceFromString(className, sourceCode));
}};
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
compiler.getTask(null, fileManager, null, null, null, unitsToCompile).call();
fileManager.close();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
FileInputStream fis = new FileInputStream(className + ".class");
IOUtils.copyStream(fis, bos);
return bos.toByteArray();
Вы можете взять источникJavaSourceFromString
изJavadoc.
Это будет очень легко скомпилироватьsourceCode
вFoo.class
в текущем рабочем каталоге.
Мой вопрос: можно ли скомпилировать прямо вbyte[]
массив, и избежать беспорядка иметь дело сFile
Ввод-вывод вообще?