如何将Groovy类加载到Activiti的Groovy脚本引擎中? [英] How to load Groovy classes into the Groovy script engine of Activiti?
问题描述
我正在Activiti中加载具有以下结构的Groovy项目:
I am loading a Groovy project with the following structure in Activiti :
└───src
└───main
└───groovy
├───classes
│ Foo.groovy
│
└───scripts
script.groovy
script.groovy
package scripts
import classes.Foo
Foo.groovy
package classes
class Foo {
Foo(){
}
}
我的问题是我的脚本的导入语句: import classes.Foo
无法由Activiti解析。
My problem is that the import statement of my script: import classes.Foo
is not resolved by Activiti.
我正在使用 org.activiti:activiti-spring:5.21.0
在Spring容器中运行Activiti。我的脚本是使用 org.activiti-engine:5.21.0
中的groovy脚本引擎进行评估的。
I am running Activiti inside a Spring container using org.activiti:activiti-spring:5.21.0
. My scripts are evaluated using the groovy scripting engine in org.activiti-engine:5.21.0
.
如何使Activiti知道我的 Foo.groovy
类?
How to make Activiti aware of my Foo.groovy
class ?
我一直在寻找
我试图手动解析文件中的import语句并对其求值,但是我对这种解决方案不满意。
I tried to manually resolve the import statements from the files and evaluate them but I am not satisfied with this solution.
我看到Activiti使用脚本引擎 GroovyScriptEngineImpl 来评估我的脚本。
I see that Activiti uses the scripting engine GroovyScriptEngineImpl to evaluate my script.
推荐答案
我设法使用 GroovyClassLoader#parseClass()方法。
final GroovyScriptEngineImpl engine = (GroovyScriptEngineImpl) this.scriptingEngines.getEngineByName("groovy");
GroovyClassLoader classLoader = engine.getClassLoader();
Files.walk(...)
.filter(Files::isRegularFile)
.forEach(path -> {
classLoader.parseClass(new GroovyCodeSource(path.toUri()));
});
engine.setClassLoader(classLoader);
这篇关于如何将Groovy类加载到Activiti的Groovy脚本引擎中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!