그래서 최근에 JDK 1.6에서 새로운 JavaCompiler API을 사용할 수 있음을 알게되었습니다. 이것은 매우 간단한 실행 코드에서 직접 String
.class
A와 파일을 컴파일 할 수 있습니다 :JDK 1.6의 JavaCompiler : byte [] 배열에 직접 클래스 바이트를 쓰는 방법?
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();
당신은 Javadoc에서 JavaSourceFromString
에 소스를 잡을 수 있습니다.
이것은 현재 작업 디렉토리에서 sourceCode
에서 Foo.class
까지 매우 편리하게 컴파일합니다.
내 질문은이다 : 그것은이 가능합니다 byte[]
배열로 바로 컴파일하고 모두 I/O File
처리의 어지러움을 방지하기 위해?