Gradle知识整理

1. 背景

以前在学习的时候,学习JavaEE的开发,接触的项目都是采用Maven进行构建与进行包管理的。而在学习安卓开发时,发现采用Android Studio开发的安卓项目都是基于gradle进行构建的,而且因为gradle版本的不同,会出现各种兼容性与多次重复下载依赖的问题,此时觉得Grdale使用起来十分不便。
后来,在工作中接触了使用Gradle作为构建工具的JAVA项目,能构建出一个多模块的系统,语法简洁、可读性更高,依赖关系看起来更加直观清晰。


2. Gradle简介

  1. 基础
    Gradle是一个基于ApacheAnt和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。
    通俗讲,Gradle的依赖管理是基于apache Ivy的,任务和构建是基于ant的,脚本是用groovy的
  2. 优点
  • 支持多项目构建与局部构建,即增量构建
  • 对其他架构支持,完美兼容maven项目和lvy项目
  • 基于Groovy的可扩展的DSL,构建更简洁、易维护、可理解
  • 可编程的DSL,有自己的一套通用任务图来构建项目,也有很大灵活性供满足定义需求
  • Gradle Wrapper 允许在没有安装 Gradle 的机器上执行 Gradle 构建。它强制使用指定的版本,以减少兼容支持问题。

3. Gradle使用

  1. 安装

    gradle安装基于java,mac os下安装只需采用brew命令便可完成安装与环境变量的配置:

brew install gradle

  1. 安装完成后,可使用gradle -v命令查看版本信息。
  2. 构建脚本

    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命令和传入的参数创建并执行任务。

  1. 构建过程
    初始化(Initialization)

    Gradle可以构建一个和多个项目。在初始化阶段,Gradle会确定哪些项目参与构建,并且为这些项目创建一个Project实例。
    配置(Configuration)

    在这个阶段,会配置project对象。将执行构建的所有项目的构建脚本。也就是说,会执行每个项目的build.gradle文件。
    执行(Execution)

    Gradle确定要在执行期间创建和配置的任务子集。子集由传递给gradle命令和当前目录的任务名称参数确定。 Gradle然后执行每个选定的任务。
  2. 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的依赖列表