Bootstrap

工程专题-Gradle学习之旅

前言

这节我们讲一下Gradle,同ant、maven一样,都是项目构建工具。

  • gradle使用编程语言(groovy语法)构建
  • ant(2002),maven(2008)使用xml构建

xml构建的痛点:项目大,文件长,而且不像gradle可以写入逻辑脚本。

本节学习路线指引:

  1. groovy语法
  2. Gradle的生命周期(build script block)
  3. gradle api

Gradle入门

  • gradle是什么,能做什么:
    编程框架,通过编程完成构建(gradle特色) gradle使用编程语言构建

  • gradle的优势
    DSL:领域特定语言:html,UML gradle优势
    灵活性(ant、maven无法)
    粒度上 (ant、maven源代码和构建脚本分开)力度在task 扩展性 复用已有的插件
    兼 容 性 兼 容 ant|maven gradle 4.x的版本支持kotlin gradle组成

  • gradle安装教程
    下载地址
    版本:2.5.4
    在这里插入图片描述

官网下载,配置环境变量与本地仓库和阿里镜像仓库,这里不多做介绍
安装成功后的效果:
在这里插入图片描述
在这里插入图片描述

  • Gradle优势
    兼具脚本语言与静态语言
    jvm虚拟机上
    完全兼容java语法
  • Gradle构建项目
    在这里插入图片描述

groovy核心语法

既然gradle基于groovy语法构建,我们首先应该从groovy语法入手

groovy所有类型都是对象

字符串
逻辑控制
重点:switch,for each
闭包使用
gradle基于groovy语言实现,而groovy最重要的语法就是闭包!
所有的闭包都有返回值:
没有return语句;
返回null,反之返回具体的值
函数中超过两个参数以上,并且最后一个参数是闭包,可以把闭包放在{}

	Project project(String var1, Closure var2); 
	project('myproj-common'){Project project ->
		group 'com.test' 
		version '2.0.0' 
		dependencies {
		}
}

字符串与闭包
列表:list
字 典 :map

groovy语法篇地址链接
groovy的语法演示demo在目录:/groovy

Gradle案例项目说明

我们新建一个gradle项目,了解一下目录结构:
在这里插入图片描述

  • build.gradle
    简单地可以理解为maven的pom.xml文件,构建逻辑,gradle工具通过build.gradle完成 构建
    project + task 组成了gradle基础骨架基础命令:clean build check
buildScript{
依赖配置:gradle自身对外部插件的依赖
}
外部(allprojects{}){
依赖配置:项目本身对外部库的依赖
}
  • setting.gradle:
    :配置项目基本信息(标记根项目和子项目)
  • gradlew
    对gradle可执行命令的包装,屏蔽不同版本的兼

    在这里插入图片描述

Gradle的生命周期

初始化->配置->执行
build script block

gradle执行过程:
在这里插入图片描述

Gradle常用的API

学了这些api的价值:

  • 了解gradle project 配置背后的原理

  • 定制化基于gradle构建的项目
    在这里插入图片描述

  • Project核心API
    AllProjects
    subProjects
    parentProject
    rootProject

  • 配置project group version
    allprojects 配 置
    subproject 配 置

  • 配置project属性,ext,apply from this.file(‘common.gradle’)
    文件属性相关rootdir,builddir,projectdir 获取文件
    内容
    copy
    文件遍历
    依赖管理,buildScript

Project核心API实战:
gradle项目地址链接
groovy的语法演示demo在目录:/gradle

详解build.gradle

1.从零搭建gradle多模块项目
使用gradle搭建springboot多模块应用

2.buildscript:gradle自身依赖的插件如何获取

buildscript {
ext { springBootVersion = '2.0.1.RELEASE' }
repositories {
//按照配置的顺序查找
//mavenCentral()
maven{ url'http://maven.aliyun.com/nexus/content/groups/public/'}
}
dependencies { classpath("org.springframework.boot:sp ring-boot-gradle- plugin:${springBootVersion}") }
}

3.插件配置

plugins { id 'java'
}

4.jar插件

jar {
baseName = 'springboot- application'
version = '0.0.1-SNAPSHOT'
}

5.仓库配置

repositories {
//mavenCentral()
maven{ url
'http://maven.aliyun.com/nexus/content
/groups/public/'}
}

6.依赖管理依赖类型:

  • implementation (gradle4.x) 这个指令的特点就是,对于使用了该命令编译的依赖,对该项目有依赖的项目将无法访问到使用该命令编译的依赖中的任何程序,也就是将该依赖隐藏在内部,而不对外部公开。
    A->log4j B->A
  • api 完全等同于compile指令。
  • compile (gradle3.x) 这种是我们最常用的方式,使用该方式依赖的库将会参与编译和打包。
  • testCompile testCompile 只在单元测试代码的编译以及最终打包测试apk时有效。
  • debugCompile debugCompile 只在debug模式的编译和最终的debug apk打包时有效。
  • releaseCompile
    releaseCompile 仅仅针对Release模式的编译和最终的Release apk打包。
dependencies { compile
'org.springframework.boot:spring-boot- starter-web'
// 添加该依赖主要是解析yaml
compile 'com.fasterxml.jackson.dataformat:jack son-dataformat-yaml:2.9.5'
// 添加该依赖主要解析json
//	compile 'com.fasterxml.jackson.core:jackson- databind:2.9.5'
testCompile 'org.springframework.boot:spring-boot- starter-test'
}

依赖冲突解决冲突
查看依赖报告
排查传递性依赖
在这里插入图片描述
强制一个版本
在这里插入图片描述
默认冲突策略
在这里插入图片描述
默认情况下使用最高版本
7. allproject
8. subject
9. 当项目配置
在这里插入图片描述
10. 扩展性配置
在这里插入图片描述
11. 发布

在这里插入图片描述
12. source sets
java插件引入了一个概念叫做source sets , 通过修改sourcesets中的属性,可以指定哪些源文件(或文件夹下的源文件)要被编译,哪些源文件要被排除。Gradle就是通过它实现java项目的布局定义。

source sets{
	main{
		java{
			srcdir ‘src/java’//指定源码目录
		}
		resources{
			srcdir ‘src/java’//指定资源目录
		}
	}
}

后记

  • 附demo学习地址:gradle
  • Gradle 参考书:《实战Gradle》
;