Groovy вызывает другой скрипт для установки переменных - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь определить переменные в другом отличном скрипте, который я хочу использовать в моем текущем скрипте.У меня есть два сценария, как это:

script1.groovy

thing = evaluate(new File("script2.groovy"))
thing.setLocalEnv()
println(state)

script2.groovy

static def setLocalEnv(){
    def state = "hi"
    def item = "hey"
}

Когда я println(state), я получаю исключение отсутствующего свойства.По сути, я хочу, чтобы script2 имел конфигурационные переменные, которые я могу загрузить в контексте script1.Как я могу это сделать?

1 Ответ

0 голосов
/ 19 апреля 2019

Я не уверен, что / как именно вы хотите сделать, но я полагаю, что вы можете достичь своей цели, используя один из классов, доступных в Groovy Dynamic Script: groovy.lang.Binding или GroovyClassLoader или GroovyScriptEngine, здесь пример использования GroovyShell class:

abstract class MyScript extends Script {
    String name

    String greet() {
        "Hello, $name!"
    }
}

import org.codehaus.groovy.control.CompilerConfiguration

def config = new CompilerConfiguration()
config.scriptBaseClass = 'MyScript'
def shell = new GroovyShell(this.class.classLoader, new Binding(), config)
def script = shell.parse('greet()')
assert script instanceof MyScript
script.setName('covfefe')
assert script.run() == 'Hello, covfefe!'

Это один из способов привязать переменную к внешнему файлу скрипта, другие примеры из документа: http://docs.groovy -lang.org / последний / HTML / документация / гид-integrating.html

P.S. Загрузка внешнего файла может быть сделана с помощью GroovyClassLoader:

def gcl = new GroovyClassLoader()
def clazz2 = gcl.parseClass(new File(file.absolutePath))

Надеюсь, это поможет.

...