我有几个模块包含在根项目中。一个模块具有 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
按钮)注意,从 Gradle Tasks View
中一个接一个地调用任务在 Idea 中工作完美。
最佳答案
如果您有这样的示例项目:
.
├── 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
已更改)
这是你的意思吗?
关于android - 刷新项目的 Gradle 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49751039/