首先,在您的 gradle-wrapper.properties 中,添加以下内容:
org.gradle.caching=true
org.gradle.parallel=true
看看有没有帮助。 应该。
第二,您可能想要实现TaskExecutionListener 并将其注册到gradle.taskGraph.addTaskExecutionListener。 advice 来自Peter Niederwieser 本人。
简而言之,在您的顶级 gradle.build 中,复制以下内容:
import java.util.concurrent.TimeUnit
class TimingsListener implements TaskExecutionListener, BuildListener {
private long startTime
private timings = []
@Override
void beforeExecute(Task task) {
startTime = System.nanoTime()
}
@Override
void afterExecute(Task task, TaskState taskState) {
def ms = TimeUnit.MILLISECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS);
timings.add([ms, task.path])
task.project.logger.warn "${task.path} took ${ms}ms"
}
@Override
void buildFinished(BuildResult result) {
println "Task timings:"
for (timing in timings) {
if (timing[0] >= 50) {
printf "%7sms %s\n", timing
}
}
}
@Override
void buildStarted(Gradle gradle) {}
@Override
void projectsEvaluated(Gradle gradle) {}
@Override
void projectsLoaded(Gradle gradle) {}
@Override
void settingsEvaluated(Settings settings) {}
}
gradle.addListener new TimingsListener()
输出可能如下所示:
gradlew build
> Task :compileJava UP-TO-DATE
:compileJava took 3255ms
> Task :processResources UP-TO-DATE
:processResources took 10ms
> Task :classes UP-TO-DATE
:classes took 0ms
> Task :bootWar UP-TO-DATE
:bootWar took 637ms
> Task :war SKIPPED
:war took 0ms
> Task :assemble UP-TO-DATE
:assemble took 0ms
> Task :compileTestJava UP-TO-DATE
:compileTestJava took 427ms
> Task :processTestResources UP-TO-DATE
:processTestResources took 5ms
> Task :testClasses UP-TO-DATE
:testClasses took 0ms
> Task :test UP-TO-DATE
:test took 62ms
> Task :check UP-TO-DATE
:check took 0ms
> Task :build UP-TO-DATE
:build took 0ms
Task timings:
3255ms :compileJava
637ms :bootWar
427ms :compileTestJava
62ms :test
奖金
您还可以通过在 build.gradle 中添加 this 来加快测试速度:
test {
maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1
}
请注意,如果您确实并行运行测试,则必须确保它们是独立的,即不共享资源,无论是文件、数据库还是其他东西。否则,测试可能会以随机且不可预测的方式相互干扰。