如何在gradle中使用基本的groovy脚本?

时间:2012-09-05 21:10:40

标签: gradle

所以,我现在有以下似乎正在按预期工作

task deleteJars(type: Delete) {
    ext.collection = files { genLibDir.listFiles() }
    delete ext.collection
}

task copyJars(type: Copy) { 
    from(configurations.compile) {}
    from(fixedLibDir) {}
    into genLibDir
}

copyJars.dependsOn('deleteJars')

我有几个问题

  1. 是否有一种更清晰的方式将其写入一个函数中?#/ li>
  2. 以前,我有以下内容,但似乎总是执行复制功能,而不是在copyJars任务运行时执行?
  3. 如何在任务中编写简单的groovy(例如删除文件,复制文件等等),以便在依赖任务时,它运行正确?
  4. 我可怕的尝试在任务依赖时进行常规运行(但不幸的是,无论我选择了什么目标并且每次运行都运行)...

    task('copyJars') { 
        ext.collection = files { genLibDir.listFiles() }
        delete ext.collection
        copy { from configurations.compile into genLibDir }
        copy { from fixedLibDir into genLibDir }
    }
    

    所以我的主要问题是如何在任务中编写groovy脚本,以便它只在该任务运行时运行? (因为我认为上面是groovy脚本,但它似乎每次都运行)

    感谢, 迪安

2 个答案:

答案 0 :(得分:2)

Gradle构建分三个阶段进行:初始化,配置和执行。构建脚本中的大多数代码都在配置阶段进行评估,这与最终将运行的任务无关。 (决定哪些任务只在配置阶段的最后,一旦所有任务及其依赖项都已知,就会进行。)要添加在任务执行时(即在执行阶段)运行的代码,使用doFirstdoLast向任务添加所谓的任务操作。例如:

task copyJars {
    doLast { /* put any Groovy code here */ }
}

您可以在Gradle User Guide

中详细了解这些概念

答案 1 :(得分:0)

好吧,所以使用它,这确实有效(不得不取出任务类型或不会运行)

task copyJars() {
    doLast {
        ext.collection = files { genLibDir.listFiles() }
        delete ext.collection
        copy { from configurations.compile into genLibDir }
        copy { from fixedLibDir into genLibDir }
    }
}