Запустите отличный скрипт изнутри Gradle

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

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

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

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

4 ответа

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

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

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

Этот сценарий предполагает использование нестандартного сценария в /tmp/HelloWorld.groovy

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

http://wayback.archive.org/web/20131006153845/http://docs.codehaus.org/display/GRADLE/Cookbook

ant.java(classname: 'com.my.classname', fork: true,
         classpath: "${sourceSets.main.runtimeClasspath.asPath}")

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

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

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

Другие вопросы по тегам