如何将Groovy类加载到Activiti的Groovy脚本引擎中? [英] How to load Groovy classes into the Groovy script engine of Activiti?

查看:790
本文介绍了如何将Groovy类加载到Activiti的Groovy脚本引擎中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆