そこで私は最近、JDK1.6で利用可能な新しいJavaCompilerAPIについて知りました。これにより、実行中のコードから直接ファイルにコンパイル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();
JavadocJavaSourceFromString
からソースを取得できます。
これは、現在の作業ディレクトリに 非常に便利にコンパイルsourceCode
されます。Foo.class
私の質問は:配列に直接コンパイルし、 I / Oをbyte[]
処理する煩わしさを完全に回避することは可能ですか?File