scala如何像groovy那样在java里直接读取源码然后执行

ynstudio 2010-05-10

我们在做一个CMS系统,希望能够像使用JSP一样,不用重启tomcat,也不用主动编译代码,来写一个类,然后就可以直接使用。看到groovy可以如下处理

String className = "xxx";//某个groovy类文件路径
GroovyScriptEngine gse = new GroovyScriptEngine(//脚本文件根路径);
Class groovyClass = gse.loadScriptByName(className);
Object o = groovyClass.newInstance();
o.xxxx();


在scala中如何实现类似效果?
vii779 2010-05-10
import scala.tools.nsc.GenericRunnerSettings
import scala.tools.nsc.Interpreter


val setting = new GenericRunnerSettings(null) 
//setting 会有很多配置项,一般不需要设置,详细信息查看api文档

val loader = getClass.getClassLoader.asInstanceOf[URLClassLoader]
setting.classpath.value += loader.getURLs.map {_.toString.replace("file:/", "")}.mkString(File.pathSeparator, File.pathSeparator, "")
//classpath可根据情况设置,设置不当会报class not found 错误,需要根据你的开发环境做合适的调整。
val preter = new Interpreter(setting)
preter.interpret("你的代码")


Interpreter编译速度比较慢,而且比较耗内存,需要权衡使用,适当的时候要释放Interpreter占用的内存。
ynstudio 2010-05-11
多谢,我再了解一下如何“适当的时候释放Interpreter占用的内存。”
Global site tag (gtag.js) - Google Analytics