当前位置: 首页 > 知识库问答 >
问题:

如何将Groovy类加载到Activiti的Groovy脚本引擎中?

羊舌高明
2023-03-14

我正在Activiti中加载一个具有以下结构的Groovy项目:

└───src
    └───main
        └───groovy
            ├───classes
            │       Foo.groovy
            │
            └───scripts
                    script.groovy

剧本groovy公司

package scripts

import classes.Foo

傅。groovy公司

package classes

class Foo {
  Foo(){
  }
}

我的问题是我的脚本的导入语句:导入类。Foo没有被Activiti解决。

我正在Springhtml" target="_blank">容器中使用org运行Activiti。activiti:activiti spring:5.21.0。我的脚本使用org中的groovy脚本引擎进行评估。activiti引擎:5.21.0。

如何让Activiti知道我的Foo。groovy类?

我一直在寻找一种指定类路径的方法,但到目前为止运气不好。

我试图从文件中手动解析导入语句并对其进行评估,但我对该解决方案不满意。

我看到Activiti使用脚本引擎GroovyScriptEngineImpl来评估我的脚本。

共有1个答案

巩才捷
2023-03-14

我使用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);
 类似资料:
  • 目前,我有一个“包罗万象”的jenkinsfile,其中包含各种函数。为了在其他jenkinsfile中重用这些函数,我想将它们放在单独的groovy脚本中,并从jenkinsfile中加载它们。 scmHandler。groovy: 在jenkinsfile中,我执行以下操作: <代码>。。。def scmHandler=负载(“测试/scmHandler.groovy”)scmHandler。

  • 我正在服务器上安装janusgraph和cassandra。我得到了下面提到的错误。另外,在服务器上部署配置文件时,要在配置文件中进行哪些更改。 Linux 服务器与 JanusGraph 0.4.0, 卡桑德拉 3.11.0 ==

  • 我对Groovy很陌生,我想从主groovy脚本中的另一个groovy脚本中导入一个类。我已经看到了这篇文章。但是由于环境限制,我不能使用GroovyClassLoader之类的函数或导入任何库/框架。我唯一的可能性是使用评估方法。 我试过这个: 主脚本(评估不会抛出任何错误) Csvreader脚本 但是,我需要通过evaluate调用传递参数(并将方法移到类之外),或者需要创建类的实例。不幸的

  • 我使用groovy脚本中的方法创建了一个自定义dsl命令链。我从另一个groovy文件访问此命令链时遇到问题。是否有实现功能的方法? 我尝试过使用“evaluate”,它可以加载groovy文件,但无法执行命令链。我尝试过使用GroovyShell类,但无法调用这些方法。 我这里有一个小房间。groovy中执行“please show the cube\u root of 1000”会产生10的结

  • 我想将一些常见的阶段移动到groovy文件中,以便其他Jenkinsfile可以使用这些阶段而不必复制它们。 我遇到了一些管道很好地加载groovy文件的问题,但当它使用groovy文件中的函数时,会弹出异常。 这是示例代码,我在jenkins配置中使用管道脚本,而不是在SCM的Jenkinsfile中使用。 和groovy文件。

  • 我有一些库脚本:lib1。groovy: lib2.groovy: lib3.groovy: 并希望在另一个脚本中使用它们:conf.groovy: conf.groovy是由用户配置的,他不知道我的后台lib脚本!他只知道提供的方法/任务:a()、b()、c()。实际上,我创建lib脚本是为了简化用户。 有没有办法将lib目录中的所有脚本(脚本lib1、lib2m、lib3)都包含到conf.g