0

我想使用基本插件发布一些工件。这就是我的构建的样子:

apply plugin: 'base'

group = 'eu.com'
version = '0.9'

def winCdZip = file('dist/winCd.zip')

configurations {
    wincd
}

repositories {
    ivy  {
        url 'http://ivy.repo'
    }
}

artifacts {
    wincd winCdZip
}

buildscript {
    repositories {
        ivy  {
            url 'http://ivy.repo'
        }
    }
    dependencies {
        classpath group: 'eu.com', name:'MyCustomTask', version:'0.9-SNAPSHOT', configuration: 'runtime'
    }
}

buildWincd {
    // call MyCustomTask; is it possible to call it in this way?
    MyCustomTask {
        // pass few parameters required by this task
    }
    // I know that it's impossible to call zip in this way but I don't want to create another task
    zip {
        // build zip and save it in 'winCdZip'
    }
}

uploadWincd {
    repositories { add project.repositories.ivy }
}

这些是我要解决的问题:

  1. 是否可以创建嵌套任务?
  2. 是否可以在不创建新任务但使用闭包的情况下调用 zip?
  3. 是否可以使用闭包调用自定义任务(与第二点相同的示例)?

我可以通过这种方式创建 zip/自定义任务

task myZip(type: Zip) {
    // do the job
}

可以这样称呼吗?

zip {
    // do the job
}

如果无法使用闭包调用任务,我该怎么做?创建新任务是唯一的方法吗?也许我可以创建嵌套任务?

4

1 回答 1

1

你的问题的答案是“不”。Gradle 是一个声明式构建系统。您无需让一个任务调用另一个任务,而是声明任务依赖项,Gradle 将在执行期间遵守这些依赖项。

对于某些任务类型(例如Copy),有一个等效的方法(例如project.copy),但对于Zip. 在大多数情况下,即使存在方法,也最好使用任务。

Gradle 用户指南的前几章详细解释了核心 Gradle 概念,例如任务依赖关系。

于 2013-06-06T16:03:39.933 回答