2

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

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. 有没有一种更简洁的方式将其写入一个函数中?
  2. 以前,我有以下内容,但似乎总是会执行复制功能,而不是在运行 copyJars 任务时?
  3. 您如何在任务中编写简单的 groovy(例如删除文件、复制文件等),以便当任务被依赖时,它运行正确?

当任务依赖时,我可怕的尝试让常规运行(但不幸的是,无论我选择什么目标,每次运行都运行)......

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

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

谢谢,院长

4

2 回答 2

2

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

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

您可以在Gradle 用户指南中了解有关这些概念的更多信息。

于 2012-09-05T21:34:07.570 回答
0

好的,所以使用它,这确实有效(尽管必须取出任务类型,否则它不会运行)

task copyJars() {
    doLast {
        ext.collection = files { genLibDir.listFiles() }
        delete ext.collection
        copy { from configurations.compile into genLibDir }
        copy { from fixedLibDir into genLibDir }
    }
}
于 2012-09-06T12:33:49.060 回答