2010-03-02 96 views
18

创建一个运行groovy脚本的gradle任务的最佳方式是什么?我认识到,建立gradle这个文件是常规的,所以我认为这将有可能做这样的事情:从gradle中运行groovy脚本

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

我获得各种古怪的错误,当我尝试这个,如果bar.groovy使用@Grab注释或即使做简单的进口。我想创建一个gradle任务来处理这个问题,这样我可以希望重用类路径定义。

示例目录移动到某个地方的src目录会更好吗?什么是最佳做法?

回答

1

我想你可能需要运行该脚本作为新进程......例如,

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

我猜想,执行摇篮的方式不是通过调用groovy,这样就使得设置@抓住工作永远不会发生。它也可能是Gradle使用的不支持@Grab的Groovy版本。

+3

与此处提出的其他建议不同的是,这需要用户具有独立安装的Groovy 。 Gradle不提供“groovy”,“groovy.bat”等。这对Gradle构建的应用程序来说是不可接受的要求,因为gradlew用于消除甚至需要独立安装Gradle系统的需求。 – Blaine 2011-10-24 17:11:13

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()) 
12

假定Groovy脚本或者你可以这样做:

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