Подтвердить что ты не робот

Запустите groovy script из gradle

Какой лучший способ создать задачу gradle, которая запускает groovy script? Я понимаю, что gradle файлы сборки groovy, поэтому я думаю, что можно было бы сделать что-то вроде этого:

task run << {
    Script app = new GroovyShell().parse(new File("examples/foo.groovy"))
    // or replace .parse() w/ a .evalulate()?
    app.run()
}

Я получаю всевозможные неприятные ошибки, когда я пытаюсь это сделать, если bar.groovy использует аннотации @Grab или даже делает простой импорт. Я хочу создать задачу gradle для обработки этого, чтобы я мог надеяться повторно использовать определение класса.

Было бы лучше переместить каталог examples в каталог src где-нибудь? Какая передовая практика?

4b9b3361

Ответ 1

Или вы могли бы сделать:

new GroovyShell().run(file('somePath'))

Ответ 2

Вы можете попробовать использовать GroovyScriptEngine вместо GroovyShell. Я использовал его ранее с аннотациями @Grab. Вам понадобится все groovy в пути к классам, groovy -all.jar будет недостаточно. Я предполагаю, что Айви не упакован в groovy -all.jar. Что-то вроде этого должно к трюку:

Этот script предполагает groovy script в /tmp/HelloWorld.groovy

def pathToFolderOfScript = '/tmp'
def gse = new GroovyScriptEngine([pathToFolderOfScript] as String[])
gse.run('HelloWorld.groovy', new Binding())

Ответ 4

Я думаю, вам, вероятно, нужно запустить script как новый процесс... например,

["groovy","examples/foo.groovy"].execute()

Я бы предположил, что способ Gradle выполняется не путем вызова groovy, поэтому настройка, которая делает работу @Grab, никогда не произойдет. Это также может быть версия Groovy, которая использует Gradle не поддерживает @Grab.