smart plugin para groovy gradle groovyclassloader

groovy - plugin - Ejecutar script maravilloso desde dentro de Gradle



plugin de groovy para smart tv (4)

¿Cuál es la mejor manera de crear una tarea de Gradle, que ejecuta un script groovy? Me doy cuenta de que los archivos de compilación de Gradle son geniales, por lo que creo que sería posible hacer algo como esto:

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

Recibo todo tipo de errores extravagantes cuando intento esto si bar.groovy está usando anotaciones @Grab o incluso haciendo importaciones simples. Quiero crear una tarea de gradle para manejar esto, de modo que espero poder reutilizar la definición de classpath.

¿Sería mejor mover el directorio de ejemplos al directorio src en algún lugar? ¿Qué es una mejor práctica?


Creo que probablemente necesite ejecutar el script como un nuevo proceso ... por ejemplo,

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

Supongo que la forma en que se ejecuta Gradle no es a través de invocar groovy , por lo que la configuración que hace funcionar a @Grab nunca sucede. También podría ser la versión de Groovy que Gradle utiliza no es compatible con @Grab.


O podrías hacer:

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


Puedes intentar usar GroovyScriptEngine en lugar de GroovyShell. Lo he usado previamente con las anotaciones @Grab. Necesitará todo Groovy en el classpath, groovy-all.jar no será suficiente. Supongo que Ivy no está empaquetada en el groovy-all.jar. Algo así debería hacer al truco:

Este script supone un script maravilloso en /tmp/HelloWorld.groovy

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