如何将内存中的java类写入.class文件?

时间:2015-11-19 10:29:50

标签: java classloader

在我的应用程序中,我正在使用groovy.lang.GroovyClassLoader将一些常规文件编译到Class<?>。这些类保存在HashMap中,稍后再使用。

由于此编译在启动时发生,因此启动时间比预期要长。

有没有办法将生成的Class<?>对象转储到某些.class文件,然后下次直接从jar加载类?

所以我正在寻找一种从内存.class对象中编写Class<?>个文件的方法

1 个答案:

答案 0 :(得分:0)

也许我对这个问题有点晚了,但是最近我找到了一种方法。 在内部检查代码我在内部知道GroovyClassLoader使用称为CompilationUnit的类。您可以这样使用它

CompilationUnit cu = new CompilationUnit()
cu.addSource(compilationUnitName,srcCode)
cu.compile()
cu.getClasses() //This returns a list of `GroovyClass`es, they contain the 
//name and the bytecode (byte[]) of the generated classes.

然后可以将字节保存在扩展名为.class和voilá的文件中。您可以将它们压缩到.jar文件中,也可以使用GroovyClassLoader方法defineClass

加载此类。