Gradle的Daemon模式

关于如何设置gradle的daemon模式,在这篇文档1中有说明。Gradle会在我们的用户目录下创建一个名为”.gradle”的目录:

$ ls -d ~/.gradle
/Users/weli/.gradle

我们在其中创建一个配置文件:

echo "org.gradle.daemon=true" >> ~/.gradle/gradle.properties

配置完成后,试着build项目:

imac:04 weli$ gradle build
Starting a new Gradle Daemon for this build (subsequent builds will be faster).
:buildEnvironment

------------------------------------------------------------
Root project
------------------------------------------------------------

classpath
No dependencies

BUILD SUCCESSFUL

Total time: 1.968 secs

可以看到gradle会启动一个daemon,这样后续build的时候就会省去了gradle自身的加载和启动时间,提升了build速度。我们可以找到gradle的相关进程:

$ ps -ef | grep java
  501 22085     1   0  1:02AM ttys001    0:04.82 /Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/bin/java -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Xmx1024m -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -cp /Users/weli/projs/gradle-2.14/lib/gradle-launcher-2.14.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 2.14
  501 22126 20686   0  1:04AM ttys001    0:00.00 grep java

可以使用下面的命令停掉daemon:

$ gradle --stop
Stopping daemon(s).
Gradle daemon stopped.

我们可以使用gradle的报告功能-profile来查看执行过程的性能分析:

$ gradle hello -profile
:hello
Hello, world!

BUILD SUCCESSFUL

Total time: 0.49 secs

执行完成后会生成html格式的报告:

$ tree
.
├── build
│   └── reports
│       └── profile
│           ├── css
│           │   ├── base-style.css
│           │   └── style.css
│           ├── js
│           │   └── report.js
│           ├── profile-2016-06-27-01-06-30.html
│           └── profile-2016-06-27-01-06-33.html
└── build.gradle

5 directories, 6 files

报告样式如下:

如果我们比对第一次执行build task,启动daemon,以及后续再次执行build task的两份报告,应该可以看到Startup所需时间上面的差别。

  1. https://docs.gradle.org/2.14/userguide/gradle_daemon.html