从gradle中运行groovy脚本

时间:2010-03-02 02:18:36

标签: groovy gradle groovyclassloader

创建一个运行groovy脚本的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任务来处理这个问题,这样我就可以希望重用类路径定义。

examples 目录移动到某个地方的src目录会不会更好?什么是最佳实践?

4 个答案:

答案 0 :(得分:13)

或者你可以这样做:

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

答案 1 :(得分:7)

您可以尝试使用GroovyScriptEngine而不是GroovyShell。我之前使用过@Grab注释。你将需要类路径上的所有groovy,groovy-all.jar是不够的。我猜Ivy没有打包在groovy-all.jar中。这样的事情应该是诀窍:

此脚本假定在/tmp/HelloWorld.groovy

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

答案 2 :(得分:2)

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}")

答案 3 :(得分:1)

我认为您可能需要将脚本作为新进程运行...例如,

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

我猜想Gradle的执行方式不是通过调用groovy,因此使@Grab工作的设置永远不会发生。它也可能是Gradle使用的Groovy版本不支持@Grab。