JavaCompiler de JDK 1.6: ¿cómo escribir bytes de clase directamente en el byte [] array?
Así que recientemente me enteré de la nuevaAPI de JavaCompiler disponible en JDK 1.6. Esto hace que sea muy simple compilar unString
a un.class
archivo directamente desde el código de ejecución:
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();
Puedes agarrar la fuente paraJavaSourceFromString
desde elJavadoc.
Esto compilará muy fácilmentesourceCode
aFoo.class
en el directorio de trabajo actual.
Mi pregunta es: es posible compilar directamente a unbyte[]
matriz, y evitar el desorden de tratar conFile
¿E / S en total?