我正在重构一个项目,该项目在编译期间使用javaCC创建专有语言解析器。由于语言的不同变体可以同时存在,因此决定在运行时从jj文件动态生成java源代码,然后将java文件编译成类文件并加载它们。
为了更有效地这样做,我想在内存中生成java文件到我想的某些流。 JavaCC的API Javadoc不太容易访问:)。
如何最好地进步?
答案 0 :(得分:1)
kdgregory建议你最好修改你的构建过程。但是,this article描述了如何创建一个新的类加载器,它使用编译器API动态编译一些Java代码。修改它以从文件而不是字符串中读取应该相当容易。
答案 1 :(得分:1)
您可以使用Compiler API aka JSR-199(请参阅javax.tools
)来编译内存生成的类。您需要扩展javax.tools.SimpleJavaFileObject
类以创建一个类,该类将表示RAM中Java类的源文本。
查看以下example,它实际上正在执行RAMResidentJavaFileObject
。