【发布时间】:2019-09-09 22:26:36
【问题描述】:
在我的应用程序中,我需要在运行时编译类/脚本。
作为Class:
Class<? extends LoginAdapter> clazz = groovyClassLoader.loadClass name
LoginAdapter la = clazz.newInstance id, logo
或Closure:
Closure action = groovyShell.evaluate( script, name ) as Closure
这两种方式都很有魅力。
现在我需要能够将编译后的类/脚本写入一些持久性存储(光盘),然后在不从头开始编译的情况下恢复它们。
如何做到这一点?
【问题讨论】:
-
Serializable 应该会有所帮助。但是,从您的示例中不清楚您要存储什么:类或实例。你想如何重用存储的对象?
-
@daggett 我想存储课程。第二个例子也可以重新排列成一个类。
-
理论上您可以扩展 GroovyClassLoader 并覆盖 createCollector ,后者用于从一个来源收集内存中编译的类。此方法中还有 CompilationUnit 可用,它实际上是进行编译,并具有 getClasses() 方法,该方法返回具有 getBytes() 方法的 GroovyClass 列表……但对我而言,使用 groovyc 运行编译更容易。
-
@daggett 感谢您的提示!
groovyc可以以编程方式运行吗? -
groovyc 开始
org.codehaus.groovy.tools.FileSystemCompiler。检查一下。
标签: groovy classloader dynamic-class-loaders