Я пытаюсь запустить Groovy скрипт внутри Java - PullRequest
0 голосов
/ 19 октября 2019

У меня есть разобранный HTML-файл, внутри которого есть тег с отличным скриптом. У меня есть скрипт groovy внутри строки, и я должен выполнить его во время выполнения и сохранить состояние, чтобы я мог использовать его позже.

Кто-нибудь может понять, как:

  1. ВыполнитьGroovy скрипт внутри Java
  2. Сохраните состояние для дальнейшего использования.

Спасибо!

1 Ответ

1 голос
/ 19 октября 2019

Класс groovy.util.Eval, вероятно, является самым простым способом динамического выполнения Groovy во время выполнения. Ниже приведен пример:

import groovy.util.Eval;

public class Goovy123 {
    public static void main(String[] args) {
        System.out.println(Eval.me("33*3"));//99
        System.out.println(Eval.me("'foo'.toUpperCase()"));//FOO
    }
}

Я использовал следующую зависимость maven в своем проекте для необходимой библиотеки:

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-all</artifactId>
    <version>2.5.8</version>
    <type>pom</type>
</dependency>

Обновление:

Я публикую это обновление, чтобы добавить пример состояния, которого не было в моем исходном ответе. Используя класс groovy.lang.Binding, вы можете сохранить состояние в переменной и использовать его позже в своей программе. Ниже приведен пример:

import groovy.lang.Binding;
import groovy.lang.GroovyShell;
import groovy.util.Eval;

public class Goovy123 {
    public static void main(String[] args) throws InterruptedException {
        Binding binding = new Binding();
        String foo="foo";   
        binding.setVariable("foo", foo);
        GroovyShell shell = new GroovyShell(binding);
        System.out.println("Original state: "+binding.getVariable("foo"));
        shell.evaluate("foo=foo.toUpperCase();");
        System.out.println("Changed state: "+binding.getVariable("foo"));
    }
}
...