我可以使用与ASM相同的“生成器”生成Java字节码和源代码吗?

时间:2012-03-26 07:13:31

标签: java java-bytecode-asm

我的Google foo让我失望。如果我有一些框架可以基于注释进行代码生成,并且我想支持构建时代码生成,以便开发人员可以提前编译它,也看看生成了什么甚至可能修改代码,但也为更动态的应用程序提供运行时字节码生成,例如基于插件的应用程序,我可以将ASM用于这两个任务,还是我真的需要对此进行两次编程,有两个不同的库?如果可能的话,欢迎链接到示例。

2 个答案:

答案 0 :(得分:3)

虽然这不能直接回答这个问题,但我建议使用Javassist而不是ASM。

使用Javassist,您可以从生成源代码开始,然后只需将其提供给Javassist编译器即可转换为字节码,因此您现在可以使用它们而不需要任何额外的技巧。另外,恕我直言,为Javassist生成源代码比使用字节码和ASM更容易。

答案 1 :(得分:1)

对于构建时代码生成我建议使用eclipse java编译器,它没有开放的API,但实际上它很容易使用。您可以在这里查看如何使用它:http://git.jetbrains.org/?p=mps/mps.git;a=tree;f=core/kernel/source/jetbrains/mps/compiler;h=6787147e3b36899574f042dd2132a4c08963670e;hb=HEAD(此代码主要是由我编写的)。还有一个如何动态加载编译类的示例(MyClassLoader内部类)。