Запустите отличный скрипт изнутри 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.