我在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
逐个调用任务是完美的。
答案 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
内的所有文件都没有更改)
这是你的意思吗?