build.gradle中的gradle任务方法语法

时间:2016-07-28 04:43:00

标签: gradle groovy

我是gradle和groovy的新手,我正在阅读Gradle的usr指南,并对任务方法有一些语法问题:

task intro(dependsOn: hello) {
   doLast { println "I'm Gradle" }  
}

问题1:在上面的代码中,在Project API中调用了哪种方法?我知道API有四个重载:

Task task(String name, Closure configureClosure);
Task task(Map<String, ?> args, String name, Closure configureClosure);
Task task(Map<String, ?> args, String name) throws InvalidUserDataException;
Task task(String name) throws InvalidUserDataException;

intro(dependsOn: hello)copy(type: Copy)这样的参数让我感到困惑,如果添加括号应该是什么?

问题2:为什么&lt;&lt;是doLast方法的简写?我的意思是leftshift API中有Task方法?他们之间的差异是什么?

问题3:为什么可以在build.gradle 17.1. Defining tasks中使用tasks.create()方法,我在tasks API或Project来源中没有看到AbstractProject属性代码。

1 个答案:

答案 0 :(得分:1)

在这种特殊情况下:

task intro(dependsOn: hello) {
   doLast { println "I'm Gradle" }  
}

将调用以下方法:

Task task(Map<String, ?> args, String name, Closure configureClosure);

由于gradle使用特定的DSL,因此可能很难说:

  1. Q1

    • introString name参数
    • dependsOn: hello相当于[dependsOn: hello]MapMap<String, ?> args
    • { doLast { println "I'm Gradle" } }Closure configureClosure
  2. Q2

  3. <<doLast的简写,只是为了让它更简洁。您可以使用doLast<<leftShift - 它们都是一样的。覆盖了leftShift - 请参阅here

    1. Q3
    2. 没有这样的方法tasksgetTasks,请参阅here。这就是groovy的工作方式 - 如果方法是getter ()并且get可以省略,那么project.getTasks()等同于project.tasks