3

我的安装程序分为三个阶段:

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)移动,但这里似乎不是最好的解决方案。

谢谢

4

2 回答 2

9

好吧,如果这对您有帮助,您也可以手动调用您的依赖项:

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

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

问候,

于 2011-06-08T23:30:32.523 回答
2

正如 tim 提到的,您可以将构建配置为具有这些依赖项。“重用”任务是什么意思?您可以在此处使用自动装配,而不是使用 dependsOn 属性。

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

问候,勒内

于 2011-06-07T17:45:39.003 回答