JavaCompiler from JDK 1.6: how to write class bytes directly to byte[] array?

╄→гoц情女王★ 提交于 2019-11-30 13:42:39

Maybe you could create your own javax.tools.JavaFileManager implementing class where you would return your own implementation of javax.tools.FileObject which would then write it out to memory instead to disk. So for your subclass of javax.tools.FileObject Writer openWriter() throws IOException method you would return a java.io.StringWriter. All the methods should be converted to their String counterparts.

The reason that there is no standard API to write bytecodes to a byte array is that compiling a single Java source file may result in multiple bytecode files. For example, any source file with nested / inner / anonymous classes will result in multiple bytecode files.

If you roll your own JavaFileManager, you will need to deal with this situation.

Pascal Thivent

The demo application that shipped with the JSR 199 API had an in-memory compile-from-string example (which is indeed using a MemoryFileManager). Maybe have a look at it here or here (these samples are a bit outdated though, they will require slight changes). Also maybe check the How to compile on the fly? article on Java.net.

PS: I didn't look at all the details, but I'm don't think it handles the cases mentioned by Stephen C.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!