Запустите отличный скрипт изнутри Gradle - PullRequest
18 голосов
/ 02 марта 2010

Каков наилучший способ создать задачу 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.

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

Ответы [ 4 ]

13 голосов
/ 02 апреля 2010

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

new GroovyShell().run(file('somePath'))
7 голосов
/ 09 марта 2010

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

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

def pathToFolderOfScript = '/tmp'
def gse = new GroovyScriptEngine([pathToFolderOfScript] as String[])
gse.run('HelloWorld.groovy', new Binding())
2 голосов
/ 12 января 2011

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

ant.java(classname: 'com.my.classname', fork: true,
         classpath: "${sourceSets.main.runtimeClasspath.asPath}")
1 голос
/ 02 марта 2010

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

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

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

...