我需要从 DataBase 加载一堆 groovy 脚本,如下所示:
List<ScriptDAO> scriptList = dataBaseRepository.findAll();
GroovyClassLoader groovyClassLoader = new
GroovyClassLoader(this.getClass().getClassLoader());
for (ScriptDAO script : CollectionUtils.emptyIfNull(scriptList)) {
groovyClassLoader.parseClass(script.getContent);
}
当调用 parseClass 方法时,会引发此异常:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script_30b09946e4afa374dc45b9929ce7d050.groovy: 3: unable to resolve class com.xxx.groovy.model.RuleDataB
我看到了这个问题:GroovyClassLoader and imports。我知道这个错误是由RuleDataB
未加载引起的。
脚本是这样的:
package com.xxx.groovy.business
import com.google.common.collect.Lists
import com.xxx.groovy.model.RuleDataB
import org.apache.commons.collections4.CollectionUtils
class RuleDataA {
/**
* getData
*/
static List<RuleDataB> getData(List<String> ids) {
if (CollectionUtils.isEmpty(ids)) {
return Lists.newArrayList()
}
return RemoteXXXService.getRuleDataBByIds(ids)
}
}
令我困惑的是如何使用该addClasspath()
方法。我的脚本是从 BD 加载的,我应该转换String
成File
吗?
我还需要reload
通过更新这个 groovy 类ScriptDAO
。