gradle:未排序的dependsOn任务,如何处理?

时间:2011-06-07 14:48:47

标签: grails groovy gradle

我的安装程序有三个阶段:

1)下载 2)解压缩 3)配置

下载,使用ant.get和ant.checksum,所以我构建了自己的DownloadTask类,然后在构建中:

task download (type: DownloadTask) {
    url = url
    checksumAlgorithm = 'MD5'
    destFile = zipFile
}

所以我带来了4个任务:

task download {...}
task unzip {...}
task configure {..}
task install(dependsOn: [download, unzip, configure]) {}

但我注意到dependsOn不尊重排序顺序,http://issues.gradle.org/browse/GRADLE-427

那么......这里的解决方法是什么?

我不能仅将此任务作为方法移动,因为下载它使用的是我的DownloadTask类。我可以将所有方法都移动(甚至是DownloadTask),但这似乎不是最好的解决方案。

由于

2 个答案:

答案 0 :(得分:10)

好吧,如果这对您有任何帮助,您也可以亲自调用您的依赖项:

task install << {
    download.execute()
    unzip.execute()
    configure.execute()
}

我认为这不是真正的Gradle想法,但对于我的多项目构建而言,这非常有效。

问候,

答案 1 :(得分:2)

如前所述,您可以将构建配置为具有这些依赖关系。 “重用”任务是什么意思?您可以在此处使用自动装配,而不是使用dependsOn属性。

自动装配意味着,您将任务下载的输出声明为解压缩任务的输入,依此类推。在上面的示例中,url将是Download任务的输入,destFile是输出。这种方法可以轻松地重用每个任务,并且不需要显式排序。在gradle用户指南的第14.8章中,您可以找到此类自动装配的简要介绍(http://www.gradle.org/current/docs/userguide/more_about_tasks.html#N10D4D)。看看有关TaskInputs和TaskOutputs的Javadoc(本章中提到)。

的问候, 勒内