Как загрузить классы Groovy в скрипт-движок Groovy Activiti? - PullRequest
0 голосов
/ 14 марта 2019

Я загружаю проект Groovy со следующей структурой в 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.

Я запускаю Activiti внутри контейнера Spring с использованием org.activiti:activiti-spring:5.21.0.Мои сценарии оцениваются с помощью Groovy обработчика сценариев в org.activiti-engine:5.21.0.

Как сообщить Activiti о моем классе Foo.groovy?

Я искалспособ указать путь к классу, но пока не повезло.

Я пытался вручную разрешить операторы импорта из файлов и оценивать их, но я не удовлетворен этим решением.

Я вижу, что Activitiиспользует механизм сценариев GroovyScriptEngineImpl для оценки моего сценария.

1 Ответ

0 голосов
/ 19 марта 2019

Мне удалось сделать это, используя 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);
...