如何将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);