如何将Groovy 类加载到Activiti的Groovy脚本引擎中?
How to load Groovy classes into the Groovy script engine of Activiti?
我正在 Activiti 中加载一个具有以下结构的 Groovy 项目:
└───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 解析。
我 运行 Activiti 在 Spring 容器中使用 org.activiti:activiti-spring:5.21.0
。我的脚本是使用 org.activiti-engine:5.21.0
.
中的 groovy 脚本引擎评估的
如何让 Activiti 知道我的 Foo.groovy
class ?
我一直在寻找一种方法来指定 class 路径,但到目前为止没有成功。
我尝试从文件中手动解析导入语句并对其进行评估,但我对此解决方案不满意。
我看到 Activiti 使用脚本引擎 GroovyScriptEngineImpl 来评估我的脚本。
我设法使用 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);
我正在 Activiti 中加载一个具有以下结构的 Groovy 项目:
└───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 解析。
我 运行 Activiti 在 Spring 容器中使用 org.activiti:activiti-spring:5.21.0
。我的脚本是使用 org.activiti-engine:5.21.0
.
如何让 Activiti 知道我的 Foo.groovy
class ?
我一直在寻找一种方法来指定 class 路径,但到目前为止没有成功。
我尝试从文件中手动解析导入语句并对其进行评估,但我对此解决方案不满意。
我看到 Activiti 使用脚本引擎 GroovyScriptEngineImpl 来评估我的脚本。
我设法使用 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);