新构建工具__Gradle入门

一. 课程介绍

1.1 项目自动化介绍

  • 石器时代:

    • 依赖管理,测试,打包,上传
  • 构建工具的作用:

    • 依赖管理
    • 测试、打包、发布
    • 机器能干的事情,自己绝不动手;
  • 主流构建工具:

    • Ant:编译、测试、打包
    • Maven:依赖管理、发布
    • Gradle:Groovy(避免了啰嗦和臃肿,具有更高的灵活性和可扩展性)
  • Gradle:

    • 它是一个开源的项目自动化构建工具,建立在Apache Ant和Apache Maven概念的基础上,并引入了基于Groovy的特定领域语言(DSL),而不再使用XML形式管理构建脚本;

1.2 课程介绍

  • 快速尝鲜:
    • 准备使用Gradle
    • 第一个Gradle项目
  • 基本原理:
    • 构建脚本介绍
    • 依赖管理
  • 深入实战:
    • 多项目构建
    • 测试
    • 发布

二. 准备使用Gradle

2.1 gradle的安装

  • 确保已经安装了JDK,打开cmd命令窗口,输入以下命令校验:
    java -version
    

    成功如图所示:
    在这里插入图片描述

  • 安装Gradle:
    1. 从Gradle官网下载Gradle,地址为:
      https://gradle.org
      
    2. 配置环境变量:GRADEL_HOME
    3. 添加到Path,%GRADLE_HOME%\bin;
    4. 验证是否安装成功,gradle -v

    成功如图所示:
    在这里插入图片描述

2.2 Groovy基础知识–理论介绍

  • Groovy是什么?
    • Groovy是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性;
  • 与Java比较?
    • Groovy完全兼容Java的语法
    • 分号是可选的(一行代码的分号可以省略)
    • 类、方法默认是public的;
    • 编译器给属性自动添加getter/setter方法
    • 属性可以直接用点号获取
    • 最后一个表达式的值会被作为返回值;
    • ==等同于equals(),不会有NullPointerExceptions;
  • 高效的Groovy特性
    • assert语句
    • 可选类型定义
    • 可选的括号
    • 字符串
    • 集合API
    • 闭包

2.3 Groovy高效特性

  1. 可选的类型定义
def version=1
  1. assert
def version=1
assert version == 2
  1. 括号是可选的
def version=1
println version
  1. 字符串(单引号是字符串,双引号可以插入变量,三引号可以换行)
def s1='my'
def s2="my name is ${version}"
def s3='''my
name
is
zhangsan'''
  1. 集合api
    // list
    def buildTools=[‘ant’,‘maven’]
    buildTools << ‘gradle’
    assert buildTools.getClass() == ArrayList
    assert buildTools.size() == 3

在groovy中,集合对应的是ArrayList,以上两个assert断言结果均为true

// map
def buildYears= [‘ant’:2000,‘maven’:2004]
buildYears.gradle=2009

println buildYears.ant
println buildYears[‘gradle’]
println buildYears.getClass()

在Groovy中,map对应的是LinkedHashMap;

// 闭包
它类似一个方法或者代码块,简单了解一下即可。需要详细了解可百度;

2.4 Groovy基础知识-- 重点

  • 代码如下:
    apply plugin:'java'
    
    version = '0.1' 
    // 闭包
    repositories { 
    	mavenCentral()
    }
    // 闭包
    dependencies {
    	compile 'commons-codec:commons-codec:1.6'
    }
    

    默认作用域都是public

每一个Groovy构建脚本都有一个Project实例

三. 第一个Gradle项目

3.1 第一个Gradle项目介绍

  • 实例介绍:
    • ToDO应用程序,只实现添加待办事项
    • Java应用程序版
    • Web版

3.2 创建一个Gradle项目

  1. 选择 File -> New Project -> 选择Gradle. 如图所示:
    在这里插入图片描述
  2. 根据实际填入: GroupId、ArtifactId、Version
  3. 选择GradleHome路径、Gradle JVM路径,如图所示:
    在这里插入图片描述
  4. 根据实际填入: Project Name 、 Project Location(工程路径)
  5. 创建项目成功后,自动生成了配置文件build.gradle,如图所示:
    在这里插入图片描述
  6. 目录结构如下:
    在这里插入图片描述
  7. IDEA右侧小窗口,点击Gradle-> Tasks->build,里面是常用的命令;
    1. clean: 与Maven类似
    2. build: 构建,执行的是所属项目下的 build.gradle文件,如果使用的是java的插件,生成的也是jar包;
    3. jar,与build命令类似,把当前源文件编译打成jar包;

    jar包在build目录的libs下面,如图所示:
    在这里插入图片描述

  • 启动jar包:
  • 如果里面没有main方法,则可以被其他项目所引用
  • 如果里面有main方法,我们可以通过命令运行,如图所示:
    在这里插入图片描述

3.3 TODO-WEB版

  1. 如图所示,提供一个web应用程序
    在这里插入图片描述
  2. 我们需要打成war包,在build.gradle进行修改,添加war插件:
    apply plgin: 'war'
    

    如图所示:
    在这里插入图片描述

  3. 点击 war,构建成war包。 将此war包放入tomcat中进行执行,放入webapps,运行tomcat,访问web页面能成功显示则说明成功;

gradle有很多构建工具,我们可以访问官网及其他文档了解详细;

四. 高级应用

4.1 构建脚本介绍

  • 构建块:

    • Gradle构建中的两个基本概念是项目(project)和任务(task),每个构建至少包含一个项目,项目中包含一个或多个任务。在多项目构建中,一个项目可以依赖于其他项目;类似的,任务可以形成一个依赖关系图来确保他们的执行顺序;
  • 项目-任务 关系:
    在这里插入图片描述

  • 项目(project)

    • 一个项目代表一个正在构建的组件(比如一个jar文件),当构建启动后,Gradle会基于build.gradle实例化一个org.gradle.api.Project类,并且能够通过project变量使其隐式可用;
    • 属性:
      1. group: 组
      2. name:名,不能重名
      3. version:版本号

      通过组,名称和版本的组合,最终确定一个唯一的项目;

      1. apply: 应用一个插件
      2. dependencies:声明用到哪些依赖
      3. repositories:告诉gradle去哪里的仓库去找这些依赖jar包(这里可以将中央仓库替换为公共仓库)
      4. task: 用来声明项目中有哪些人物
      5. ext:定义属性,直接引用
      6. gradle.properties:键值对定义属性
  • 任务(task)

    • 概述:
      • 任务对应org.gradle.api.Task. 主要包括人物动作和任务依赖。任务动作定义了一个最小的工作单元。可以定义依赖于其他任务、动作序列和执行条件;
    • 字段:
      • dependsOn: 声明任务依赖
      • doFirst、doLast:简写,表示在任务之前或者之后添加一个动作;

    当我们执行一个jar任务时,会先进行编译等其他任务操作。说明jar任务是依赖于其他任务的;
    任务在一个项目中是非必需的。同时一般情况下我们使用插件提供的任务即可,若有不满足的,可自定义任务;

4.2 自定义任务

  • 自定义任务,自动创建java目录

    1. 在build.gradle中创建代码:
      def createDir={
      	path->
      		File dir =new File(path)
      		if(!dir.exists()){
      		dir.mkdirs();
      	}
      }
      task makeJavaDir(){
      	def paths=['src/main/java','src/main/resources','src/test/java']
      }
      doFirst{
      	paths.forEach(createDir);
      }
      

    如图所示:
    在这里插入图片描述

  • 新建一个任务,可引入别的任务基础上新建,如图所示:
    在这里插入图片描述

自定义任务在other下;

4.3 构建生命周期

  • 构建生命周期,如图所示:
    在这里插入图片描述

在配置阶段就要决定任务的执行顺序以及关系,而执行时则直接执行代码了;在执行时是不能再去决定任务的执行顺序等操作;

  • 详细生命周期:
    在这里插入图片描述

- 初始化: 初始化项目,确定有哪些项目要参与到构建中来;
- 配置阶段:生成task的依赖关系及执行顺序
- 执行阶段:执行task的动作

4.4 依赖管理

  • 概述:

    • 几乎所有的基于JVM的软件项目都需要依赖外部类库来重用现有的功能。自动化的依赖管理可以明确依赖的版本,可以解决因传递性依赖带来的版本冲突。
  • 工件坐标:

    • group、name、version

    根据这三种,可以唯一确定一个项目;

  • 常用仓库:

    • mavenLocal: 本机仓库
    • mavenCentral/jcenter: 公共仓库
    • 自定义maven仓库
    • 文件仓库
  • 依赖的传递性

    • B依赖A,如果C依赖B,那么C依赖A

    正是依赖的传递性,才会出现依赖冲突;
    -自动化依赖管理:
    在这里插入图片描述

  • 依赖阶段配置:

    • compile、 runtime
    • testCompile、testRuntime
  • 依赖阶段关系:
    在这里插入图片描述

    源代码依赖的,测试一定依赖。测试依赖的,源代码不一定依赖;

  • serch.maven.org 中央仓库

  • 添加依赖:

    dependencies{
    	compile 'ch.qos.logback:logback-classic:1.2.1',
    	testCompile group:'junit',name:'junit',version:'...'
    }
    
  • 添加依赖后,在右侧Source Sets下会出现相应的jar包,在Dependencies中;

  • 仓库配置如下:
    在这里插入图片描述

    仓库可以配置多个,以前后顺序,在前面的优先执行;同时中央仓库在国外,可能下载网速较慢,我们可以使用公司公共仓库,提高下载速度;

4.5 解决版本冲突

  • 查看依赖报告
  • 排除依赖jar包
  • 强制制定一个版本(可以制定一个最新的版本)

gradle可以帮我们处理版本冲突,它会默认使用最新的jar包。如果这样也解决不了,我们可以修改默认解决策略,然后查看依赖报告;

  • 修改默认解决策略:
    configurations.all{
    	resolutionStrategy{
    		failOnVersionConflict();
    	}
    }	
    

    如图所示:
    在这里插入图片描述

  • 排除一个jar包,如图所示:
    在这里插入图片描述
  • 强制指定一个版本
    configurations.all{
    	resolutionStrategy{
    		force 'org.slf4j:slf4j-api:1.7.24'
    	}
    }
    

    如图所示:
    在这里插入图片描述

4.6 多项目构建

  • 项目模块化

    • 在企业项目中,包层次和类关系比较复杂,把代码拆分成模块通常是最佳实践,这需要你清晰的划分功能的边界,比如把业务逻辑和数据持久化拆分开来。项目符合高内聚低耦合时,模块化就变得很容易,这是一条非常好的软件开发实践;
    • 使用compile project(":要引入的项目名"),可以引入其他项目进此项目中,如图所示:
      在这里插入图片描述
  • settings.gradle:用来构建多项目的。
    在这里插入图片描述

  • 当我们在根目录的 build.gradle配置时,一些通用的配置可以在根目录进行配置,以减少重复配置;

    • 如图所示:
      在这里插入图片描述

4.7 自动化测试

  • 一些开源的测试框架比如JUnit,TestNG能够帮助你编写可复用的结构化测试,为了运行这些测试,你要先编译它们,就像编译源代码一样。测试代码的作用仅仅用于测试的情况,不应该被发布到生产环境中,需要把源代码和测试代码分开来。
  • 测试配置:
    dependencies{
    	testCompile 'junit:junit:4.11'
    }
    
  • 测试发现:
    1. 任何集成至junit.framework.TestCasegroovy.util.GroovyTestCase的类
    2. 任何被@RunWith注解的类
    3. 任何至少包含一个被@Test注解的类

4.8 发布

  • 通过引入maven-publish插件,并配置了publishing内容,我们可以将生成的jar包推送至本地仓库或者远程公共仓库,如图所示:
    在这里插入图片描述

五. 课程总结

  1. 安装gradle
  2. groovy知识
  3. 构建脚本
  4. 依赖管理
  5. 测试
  6. 发布
  7. 如图所示:
    在这里插入图片描述

课程已结束,学习无终点,祝大家好运。点击关注,查看更多,期待更多~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗余

码字来之不易,您的鼓励我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值