我在一个拥有大型多项目构建(~350个模块)的团队中,我们注意到进行单个构建(-a)仍然需要花费大量时间。在构建整套事物时,开销并不是那么糟糕,但是当我们做类似的事情时:
cd my/individual/project
gradle -a --configure-on-demand --daemon build
在配置阶段(在开始构建任何内容之前,它仍需要30-40秒,我们使用--dry-run选项进行测量)
我们有大约10个自定义任务,我们 设置这些任务的输入和输出,但我们仍然看到这个非常长的配置时间。我们正在使用gradle 1.10
答案 0 :(得分:5)
从远处说很难说。一个常见的错误是在配置阶段完成应该在执行阶段完成的工作。这是一个例子:
task myTask {
copy {
from ...
to ...
}
}
这里,每次配置任务时,都会调用project.copy
方法(因此会进行复制),这适用于每一次构建调用 - 无论哪个任务跑了!要解决此问题,您需要将工作转移到任务操作:
task myTask {
doLast {
copy {
from ...
into ...
}
}
}
甚至更好,使用预定义的任务类型:
task myTask(type: Copy) {
from ...
into ...
}
您可以采取一些步骤来查找性能问题的原因:
--info
,--debug
或--profile
PS:指定输入和输出不会缩短配置时间(但可能会缩短执行时间)。