18

创建运行 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任务来处理这个问题,以便我可以重用类路径定义。

将示例目录移动到 src 目录中的某个地方会更好吗?什么是最佳实践?

4

4 回答 4

13

或者你可以这样做:

new GroovyShell().run(file('somePath'))
于 2010-04-02T12:22:13.530 回答
7

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

此脚本假定 /tmp/HelloWorld.groovy 中的 groovy 脚本

def pathToFolderOfScript = '/tmp'
def gse = new GroovyScriptEngine([pathToFolderOfScript] as String[])
gse.run('HelloWorld.groovy', new Binding())
于 2010-03-09T15:09:08.647 回答
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}")
于 2011-01-12T08:32:32.927 回答
1

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

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

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

于 2010-03-02T20:02:10.860 回答