刷新项目的Gradle任务

时间:2018-04-10 10:14:29

标签: android gradle groovy

我在Root Projects中包含了几个模块。一个模块具有Gradle Task,可以在文件夹中收集一些依赖项。

task myTask1 {
   // gathering all dependencies in a some folder
}

另一个,使用该文件夹中生成的资源

task myTask2 {
   // using resource from some folder 
}

现在我想在根Gradle文件中创建主任务,它将从模块中调用第一个和第二个任务。

task myTask3(dependsOn: [':module1:myTask1', ':module2:myTask1']) {
    tasks.getByPath(':module2:myTask2').mustRunAfter ':module1:myTask1'
}

我看到每项任务的输出确定。但是在myTask2的情况下,我在指定的文件夹中没有任何资源,其中myTask1生成了依赖项。所以,在开始myTask2之前我应该​​刷新项目(比如Sync with File System Button)注意,在Idea中Gradle Tasks View逐个调用任务是完美的。

1 个答案:

答案 0 :(得分:1)

如果您有这样的示例项目:

.
├── build.gradle
├── module1
│   ├── build.gradle
│   └── res
│       ├── file1.txt
│       └── file2.txt
├── module2
│   └── build.gradle
└── settings.gradle

module1有复制任务:

task task1(type: Copy) {
  from "res"
  into "build/output"
}

然后,您可以将task2添加到module2,其中输入定义为:module1:task1的输出,如下所示:

task task2 {
  inputs.files tasks.getByPath(':module1:task1').outputs.files
  doLast {
    logger.lifecycle('hello')
  }
}

从根项目开始,第一次运行task2(使用普通控制台,以便我们可以看到任务解析输出),你得到:

$ gradle task2 --console plain
:module1:task1
:module2:task2
hello

BUILD SUCCESSFUL in 0s
2 actionable tasks: 2 executed

所以你可以看到,它首先运行task1,然后运行task2

如果我们再次运行它:

$ gradle task2 --console plain
:module1:task1 UP-TO-DATE
:module2:task2
hello

BUILD SUCCESSFUL in 0s
2 actionable tasks: 1 executed, 1 up-to-date

它仍以正确的顺序运行2个任务,正如您所看到的那样task1无效,因为没有工作要做(module1/res内的所有文件都没有更改)

这是你的意思吗?