我正在使用 JCodeModel 生成 java 源代码,现在想在运行时编译。但我不想以前将 Java 文件写入光盘。
据我所知,使用 javax.tools.JavaCompiler 可以进行动态编译(参见示例),但看起来我需要源代码。
不幸的是,我找不到直接从 JDefinedClass 获取源代码的方法。似乎我需要将 JDefinedClass 写入磁盘上的 File 对象,然后再读取源代码。
这真的有必要还是有一些解决方法?
我正在使用 JCodeModel 生成 java 源代码,现在想在运行时编译。但我不想以前将 Java 文件写入光盘。
据我所知,使用 javax.tools.JavaCompiler 可以进行动态编译(参见示例),但看起来我需要源代码。
不幸的是,我找不到直接从 JDefinedClass 获取源代码的方法。似乎我需要将 JDefinedClass 写入磁盘上的 File 对象,然后再读取源代码。
这真的有必要还是有一些解决方法?
您可以使用以下代码来避免磁盘操作,并使用以下方法将代码直接写入内存SingleStreamCodeWriter
:
JCodeModel jCodeModel = createJCodeModel(); // create and prepare JCodeModel
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CodeWriter codeWriter = new SingleStreamCodeWriter(baos);
jCodeModel.build(codeWriter);
String code = baos.toString(); // you can use toString(charset) if there are special characters in your code