2012-03-26 52 views
2

我的Google foo让我失望。如果我有一些框架,可以基于注释做代码生成,我想同时支持构建时代码生成,从而使开发人员可以提前编译它,也见得到生成的内容,甚至可能修改代码,而且还提供了运行时字节码一代更多动态的应用程序,例如基于插件的,应用程序,我可以使用ASM存储这两个任务,还是我真的需要两次设定此,有两个不同的库?如果可能的话,一个例子的链接将受到欢迎。我可以使用与ASM相同的“生成器”生成Java字节码和源代码吗?

回答

3

虽然这并没有直接回答这个问题,我建议使用Javassist了ASM。

用Javassist您通过生成的源代码开始时,你只需把它交给了Javassist编译器转成字节码,所以你现在有两个可用的,没有任何额外的技巧。另外,恕我直言,为Javassist生成源代码比搞乱字节码和ASM要容易得多。

+0

我可以看到你的观点。我前段时间看过Javaassist。如果没有人知道,那么这可能是我要做的。 – 2012-03-26 08:57:27

+0

我又看了一遍,我不确定如何用Javassist做到这一点。您用来生成类文件的“源代码”可能包含诸如“$ cflow(...)”之类的东西,因此它不是真正的Java代码。我只能看到方法来保存CtClass中的编译类。你确定这是支持吗? – 2012-03-26 09:29:30

+0

一天之后没有其他答案。 ASM不可能,所以你可以获得积分。 – 2012-03-27 11:00:18

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内部类)。

+0

我不确定这对我是否有用,但我给你+1的错字:“你可以*在这里起诉”LOL! – 2012-03-26 08:55:01