Gradle之恋(15)-continuous,composite和调试

楔子

每次修改源码都要重新执行gradle任务会很麻烦,因此Gradle提供了持续构建选项–continuous;多项目构建是各种构建工具的标配,而Gradle提供了更强大的相互对的composite构建.本文还阐述了如何debug调试应用程序。
Gradle

continuous

为了在修改文件后不用重新执行任务,让Gradle观察修改变动持续构建,Gradle提供了命令行选项–continuous-t.比如gradle build –continuous当更新java文件,gradle则自动重新执行build.

什么会触发持续构建呢?对任务的输入(inputs)更新会触发持续构建.在执行任务之前,Gradle会关注这些输入的变更,其他更新不会触发自动构建,比如修改build script或build的逻辑时不会触发自动重新构建.

来看看经典案例Gradle的java插件,任务如图
java 插件

开启持续构建时,compileJava任务会关注src/main/java的更新,processResources任务会关注src/main/resources的更新,compileTestJava关注src/test/java,processTestResources关注src/test/resources.

composite

有时会把一个项目拆成多个项目,这与多项目构建类似,但不同的是他们之间是相互独立的,而且不共享gradle的配置.此示例放在github上,结构如下

├── application
│   ├── build.gradle
│   ├── settings.gradle
│   └── src
│   └── main
│   └── java
│   └── App.java
└── my-utils
├── build.gradle
├── settings.gradle
└── src
└── main
└── java
└── com
└── zqf
└── utils
└── HelloStr.java

application和my-utils是两个独立的项目,各自有自己的*.gradle.application用于可执行应用,my-utils是工具jar.首先需要配置application对my-utils的依赖,build.gradle添加:

dependencies {
compile 'com.zqf:my-utils:1.0.0'
}

进入application根路径,执行命令

gradle -q run --include-build ../my-utils

即可成功执行.这里是使用的命令行选项–include-build,还可以在配置文件配置,修改application/settings.gradle

rootProject.name = 'application'

includeBuild '../my-utils'

调试

Gradle可以方便地与Eclipse进行调试,主要步骤是

使用Gradle的Java插件的–debug-jvm选项启动应用 -> eclipse的debug configurations -> 新建Remote java application ->选择项目 -> 配置端口(默认5005) -> Debug

我这里就以上面的composite项目进行演示,进入application项目执行

$ gradle run --debug-jvm
[composite-build] Configuring build: /home/james/mine/git/Lab-Demo/gradle/composite-build/my-utils
:compileJava
:my-utils:compileJava UP-TO-DATE
:my-utils:processResources UP-TO-DATE
:my-utils:classes UP-TO-DATE
:my-utils:jar UP-TO-DATE
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:run
Listening for transport dt_socket at address: 5005

可以看到使用默认的5005端口。
把项目导入到eclipse,具体可参考这里,然后通过eclipse的run->debug configurations打开对话框
调试 eclipse设置
如果你构建的是web应用,greety插件的调试类似,只是用的不是java插件的debug-jvm选项,而是用appRunDebug、appRunWarDebug等。

总结

Gradle系列以此篇为止,由于gradle的博大精深,后续还会继续学习和关注,但不在此系列了.如果你有兴趣或疑问,请不要吝啬你与我的互动交流.

–完–

翟前锋 wechat
欢迎订阅我的微信公众号:zhaiqianfeng!