1.0 Gradle是什么
一个开源的项目自动化构建工具,建立在Apache Ant 和 Apache Maven 概念的基础上,并引入了基于Groovy的特定领域语言(DSL),而不再使用XML形式管理构建脚本。
2.0 Gradle安装
- gradle下载:https://gradle.org/install/
- 解压 gradle gradle-4.4.-all.zip
- 新增环境变量 GRADLE_HOME = D:\dev\install\gradle-4.4
- 添加到path %GRADLE_HOME%\bin;
-
验证安装是否成功 gradle -v
PS:Gradle runs on all major operating systems and requires only a version 7 or higher to be installed. To check, run
java -version
3.0 Groovy基础知识
groovy是什么?
Groovy 是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。
groovy 和 Java 比较
- groovy完全兼容java的语法
- 分号是可选的
- 类、方法默认是public的
- 编译器给属性自动添加gettter/setter方法
- 属性可以直接用点号获取
- 最后一个表达式的值会被作为返回值
- == 等同于JAVA中的 equals,不会有NullPointerExceptions(NPE)
高效的groovy特性
- assert语句
- 可选类型定义
- 可选的括号
- 字符串
- 集合API
- 闭包 经常被用来当做参数
build.gradle
构建脚本中默认都是有个Project实例的
apply plugin:'java' // groovy 调用需要参数的方法是,括号是可选的。
apply是Project的一个方法,这个方法的参数是 java, plugin是指这是个具名参数。
version = '0.1'
version是Project的一个属性
repositories{
mavenCentral()
}
repositories是一个方法,闭包{mavenCentral()}是方法的一个参数
4.0 Gradle项目目录结构
5.0 构建脚本
构建块
Gradle构建中的两个基本概念是项目(project)和任务(task),每个构建至少包含一个项目,项目中包含一个或多个任务。在多个项目构建中,一个项目可以依赖于其他项目;类似的,任务可以形成一个依赖关系图来确保他们的执行顺序。
项目(Project)
一个项目代表一个正在构建的组件(比如一个jar文件),当构建启动后,Gradle会基于build.gradle实例化一个org.gradle.api.Project类,并能够通过project变量使其隐式可用。
project的主要属性: group、name、version 这三个属性可以唯一确定一个jar.
project的主要方法:apply、dependencies、repositories、task
属性的其他配置方式:ext、gradle.properties
任务(Task)
任务对应org.gradle.api.Task类。主要包括任务动作和任务依赖。任务动作定义了一个最小的工作单元。可以定义依赖于其他任务、动作序列和执行条件。
Task中主要方法:
dependsOn:声明任务依赖
doFirst、doLast(<<)
任务自定义
def createDir = {
path ->
File dir = new File(path);
if(!dir.exists()){
dir.mkdirs()
}
}
task makeJaveDir(){
def paths = ['src/main/java','src/main/resources','src/test/java','src/test/resources']
doFirst{
paths.forEach(createDir);
}
}
task makeWebDir(){
dependsOn 'makeJavaDir'
def paths = ['src/main/webapp','src/test/webapp']
doLast{
paths.forEach(createDir)
}
}
构建生命周期
初始化 -> 配置(配置阶段代码) -> 执行(动作代码 如 doLast)
依赖管理
几乎所有的基于JVM的软件项目都需要依赖外部类库来重用现有的功能。自动化的依赖管理可以明确依赖的版本,可以解决因传递性依赖带来的版本冲突。
- 工件坐标: group/name/version 可以唯一确定一个jar
- 常用仓库:
- mavenLocal/mavenCentral/jcenter
- 自定义maven仓库
PS: 当配置多个仓库时,按照配置的顺序依次查找,找到以后立即返回,不再继续查找。
本地仓库配置 mavenLocal()
公共仓库配置 mavenCentral()
自定义仓库配置 maven{ url '仓库地址' }
- 依赖的传递性
-
自动化依赖管理
-
版本冲突
默认当版本冲突时,使用高版本,此处修改为发生版本冲突构建失败
多项目构建
测试配置
发布