首页 文章

从gradle中运行groovy脚本

提问于
浏览
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任务来处理这个问题,这样我就可以重用classpath定义了 .

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

4 回答

  • 1

    或者你可以这样做:

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

    您可以尝试使用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())
    
  • 7

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

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

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

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

相关问题