Gradle知识整理
1. 背景
以前在学习的时候,学习JavaEE的开发,接触的项目都是采用Maven进行构建与进行包管理的。而在学习安卓开发时,发现采用Android Studio开发的安卓项目都是基于gradle进行构建的,而且因为gradle版本的不同,会出现各种兼容性与多次重复下载依赖的问题,此时觉得Grdale使用起来十分不便。
后来,在工作中接触了使用Gradle作为构建工具的JAVA项目,能构建出一个多模块的系统,语法简洁、可读性更高,依赖关系看起来更加直观清晰。
2. Gradle简介
- 基础
Gradle是一个基于ApacheAnt和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。
通俗讲,Gradle的依赖管理是基于apache Ivy的,任务和构建是基于ant的,脚本是用groovy的。 - 优点
- 支持多项目构建与局部构建,即增量构建
- 对其他架构支持,完美兼容maven项目和lvy项目
- 基于Groovy的可扩展的DSL,构建更简洁、易维护、可理解
- 可编程的DSL,有自己的一套通用任务图来构建项目,也有很大灵活性供满足定义需求
- Gradle Wrapper 允许在没有安装 Gradle 的机器上执行 Gradle 构建。它强制使用指定的版本,以减少兼容支持问题。
3. Gradle使用
- 安装
gradle安装基于java,mac os下安装只需采用brew命令便可完成安装与环境变量的配置:
brew install gradle
- 安装完成后,可使用
gradle -v
命令查看版本信息。 - 构建脚本
gradle通过执行build.gradle文件来实现构建。
//build.gradle基本结构说明如下:
plugins {//引入插件
id 'java'
}
group 'test' //组名
version '1.0-SNAPSHOT' //项目版本号
sourceCompatibility = 1.8 //源代码jdk版本
targetCompatibility = 1.8 //编译时用的jdk版本
repositories { //依赖仓库源
mavenCentral()
}
dependencies { /外部依赖
testCompile group: 'junit', name: 'junit', version: '4.12'
//testCompile:测试编译时需要的依赖
//testRuntime:测试运行期需要的依赖
compile group: 'com.google.code.gson', name: 'gson', version:'2.4'
//compile:系统编译时需要的依赖
//runtime:系统运行、测试时需要,但是编译时可不需要的依赖
}
4. Gradle的生命周期
Gradle的构建生命周期分为初始化,配置,执行三个阶段。初始化阶段主要是读取settings.gradle 文件,用于确定哪些项目参与构建,并创建Project实例;而配置阶段主要是为每个build.gradle 文件配置project对象;执行阶段主要是根据gradle命令和传入的参数创建并执行任务。
- 构建过程
初始化(Initialization)
Gradle可以构建一个和多个项目。在初始化阶段,Gradle会确定哪些项目参与构建,并且为这些项目创建一个Project实例。
配置(Configuration)
在这个阶段,会配置project对象。将执行构建的所有项目的构建脚本。也就是说,会执行每个项目的build.gradle文件。
执行(Execution)
Gradle确定要在执行期间创建和配置的任务子集。子集由传递给gradle命令和当前目录的任务名称参数确定。 Gradle然后执行每个选定的任务。 - Settings文件
除了build.gradle 文件外,Gradle定义了一个根目录下的settings设置文件。其在初始化阶段执行。构建多个项目时,必须在根目录中有settings.gradle文件。因为在这个文件中定义了哪些项目参加构建。
5. Gradle常用命令
build:当运行gradle build命令时Gradle将会编译和测试代码,并且创建一个包含类和资源的JAR文件。
clean:当运行gradle clean命令时Gradle将会删除build生成的目录和所有生成的文件。
assemble:当运行gradle assemble命令时Gradle将会编译并打包代码,但是并不运行单元测试。
assembleDebug 编译并打Debug包
assembleRelease 编译并打Release的包
uninstallRelease 卸载Release模式包
check:当运行gradle check命令时Gradle将会编译并测试你的代码,其他的插件会加入更多的检查步骤。
gradle dependencies 列出项目的依赖列表
gradle api:dependencies 列出项目api的依赖列表