So habe ich kürzlich von der neuen JavaCompiler API in JDK 1.6. Dies macht es sehr einfach, eine String
zu einem .class
Datei direkt aus laufenden Code zu kompilieren:JavaCompiler von JDK 1.6: Wie schreibe ich Klasse Bytes direkt in Byte [] Array?
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();
Sie die Quelle JavaSourceFromString
vom Javadoc greifen können.
Dies wird sourceCode
zu Foo.class
im aktuellen Arbeitsverzeichnis sehr handlich kompilieren.
Meine Frage ist: ist es möglich, direkt auf eine byte[]
Array zu kompilieren, und vermeiden Sie die Unsauberkeit mit File
I/O ganz im Umgang?