Что лучший способ состоит в том, чтобы создать gradle задачу, которая выполняет отличный сценарий? Я понимаю, что gradle файлы типа "build" отличны, таким образом, я думал бы, что будет возможно сделать что-то вроде этого:
task run << {
Script app = new GroovyShell().parse(new File("examples/foo.groovy"))
// or replace .parse() w/ a .evalulate()?
app.run()
}
Я получаю все виды эксцентричных ошибок, когда я пробую это, если bar.groovy использует @Grab
аннотации или даже выполнение простого импорта. Я хочу создать gradle задачу обработать это, так, чтобы я мог, надо надеяться, снова использовать определение пути к классу.
Было бы лучше переместить каталог в качестве примера в src каталог куда-нибудь? Что такое лучшая практика?
Я думаю, вам, вероятно, нужно запустить скрипт как новый процесс... например,
["groovy","examples/foo.groovy"].execute()
Я бы предположил, что Gradle выполняется не через вызов groovy
, поэтому настройка, которая заставляет @Grab работать, не происходит. Возможно также, что версия Groovy, которую использует Gradle, не поддерживает @Grab.
Вы можете попробовать использовать GroovyScriptEngine вместо GroovyShell. Я уже использовал его ранее с аннотациями @Grab. Вам понадобится весь groovy в classpath, groovy-all.jar будет недостаточно. Я предполагаю, что Ivy не упакован в groovy-all.jar. Что-то вроде этого должно сработать:
Этот сценарий предполагает наличие сценария groovy в /tmp/HelloWorld.groovy
def pathToFolderOfScript = '/tmp'
def gse = new GroovyScriptEngine([pathToFolderOfScript] as String[])
gse.run('HelloWorld.groovy', new Binding())
Или вы могли бы сделать:
new GroovyShell().run(file('somePath'))