Gradle是什么?

一个开源的项目自动化构建工具, 建立在apache ant和maven的基础上, 并引入基于Groovy的特定领域语言(DSL), 不再使用xml形式管理构建脚本.

构建工具的发展阶段: Ant --> Maven --> Gradle

准备工作

① 安装gradle

② 配置环境变量, 新建key为GRADLE_HOME, value为gradle的路径, 再将gradle下的bin目录配置到path路径下

基本介绍

Groovy是什么?

Groovy是用于Java虚拟机的一种敏捷的动态语言, 它是一种成熟的面向对象的编程语言, 既可以用于面向对象编程, 又可以用作纯粹的脚本语言, 使用该种语言不必编写过多的代码, 同时又具有闭包和动态语言中的其他特性.

与Java的比较

● Groovy完全兼容Java语法

● 分号是可选的

● 类/方法默认是public的

● 编译器给属性自动添加getter/setter方法

● 属性可以直接用点号获取

● 最后一个表达式的值会被作为返回值(可以不写return)

● == 等同于 equal(), 不会报空指针异常

高效的Groovy特性

● assert语句

● 可选类型定义

● 可选的括号

● 字符串

● 集合API

● 闭包

创建一个小例子(idea2018)

① new Project

② next

③ next

④ next --> finish

⑤ 选择Groovy视图

⑥ 编写代码

深入了解

Groovy的一些基本语法

//groovy的高效特性
//1.可选的类型定义
def version = 1  //def类似于js中的var(弱定义)//2.assert
//assert version == 2  //失败, 因为version是为1//3.括号是可选的
println(version)  //结果是1
println version  //结果还是1//4.字符串
def s1 = 'idea'  //仅仅是一个字符串
def s2 = "idea"  //可以通过${}的形式插入其他变量, 如
def s4 = "my gradle version is ${version}"  //插入变量
def s3 = '''this is
a
grovvy programming'''  //可以换行println s1
println s3
println s4//5.集合API
//list
def buildTools = ['ant', 'maven']  //默认是ArrayList类型的集合
buildTools << 'gradle'  //追加
assert buildTools.getClass() == ArrayList
assert  buildTools.size() == 3//map
def buildYears = ['ant':2000, 'maven':2004]
buildYears.gradle = 2009  //添加进mapprintln buildYears.ant
println buildYears['gradle']
println buildYears.getClass()  //默认是LinkedHashMap//闭包
//简单讲就是一个代码块, 类似方法, 参数可有无, 可以被赋值给一个变量, 也可以被当成一个参数传递给一个方法
//在Groovy中闭包的常见使用的方式
def c1 = {  //定义闭包c1v ->print v
}def c2 = {  //定义闭包c2print 'hello'
}def method01(Closure closure){closure('param  ==>  ')
}def method02(Closure closure){closure()
}method01(c1)
method02(c2)

输出

1
1
idea
this is
a
grovvy programming
my gradle version is 1
2000
2009
class java.util.LinkedHashMap
param  ==>  hello

构建脚本

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

项目(project)

● groupId name(artifactId) version

● apply(指定应用某个插件) dependencies(声明依赖的jar / 其他的项目) repositories(声明具体的仓库) task(声明项目中的任务)

● ext gradle.properties

任务(task)

● 包括任务动作和任务依赖, 任务动作定义了一个最小的工作单元, 可以定义依赖于其他任务, 动作序列和执行条件

●  dependsOn: 声明任务依赖

● doFirst doLast(<<): 在动作列表的最前边添加一个动作 / 在任务列表的末尾添加一个动作

自定义任务

由于ide工具创建gradle项目时是没法自动生成对应的目录的(src/main/java; src/main/resources...), 所以可以自己自定义一个任务来生成这些文件夹

自定义生成文件夹的任务

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', 'src/test/resources']doFirst{paths.forEach(createDir)}
}

测试结果

构建生命周期

初始化(初始化将要参与到构建中的项目) --> 配置(根据配置代码<除了动作代码之外都是配置代码>生成task的依赖顺序和执行顺序) --> 执行(执行动作代码) --> 完成构建

● task <任务名>{project.version = '1.0'}, 那么该段代码在配置阶段就会被执行

● task <任务名> doLast{<添加的内容>}, 那么该段代码在动作阶段就会被执行

● 配置代码不能放在动作代码的部分, 否则无法完成构建

依赖管理

自动化的依赖管理可以明确依赖的版本, 可以解决因传递性依赖带来的版本冲突

● 引入规则

① compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.3.Final'  //引入编译时的jar

testCompile group: 'junit', name: 'junit', version: '4.12'  //引入测试编译时的jar

② compile 'ch.qos.logback:logback-classic:1.2.1'  //第二种引入编译时的jar的方式(推荐使用)

● 工件(jar包)坐标(groupId, name<artifactId, version>)

● 常用仓库: mavenCentral(maven的中央仓库) / jcentral(Java和Android的中央仓库)

repositories {maven{url ''  //指定私服}mavenLocal()  //指定本地仓库mavenCentral()  //指定maven的中央仓库
}

● 依赖传递性: 运行时阶段扩展于编译阶段

dependencies {compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'testCompile group: 'junit', name: 'junit', version: '4.12'
}

● 版本冲突

① 查看依赖报告

② gradle会默认指定一个最高版本的jar, 可以修改默认策略

③ 排除传递性依赖

compile ('ch.qos.logback:logback-classic:1.2.1'){exclude group:'<groupId>', module:'<artifactId>'
}

④ 强制一个版本

configurations.all{

resolutionStrategy{

failOnVersionConflict()  //如果出现版本冲突则报错

force 'groupId:artifactId:version'  //强制指定具体版本的依赖

}

}

新一代的构建工具Gradle相关推荐

  1. 构建工具Gradle

    1.Summary   从Android团队开始宣布放弃Eclipse转投Android Studio时,构建工具Gradle进入了Android开发者的视野.而随着热修复.插件化.编译时注解的流行, ...

  2. Java和Android构建工具Gradle深入了解

    Gradle3.0编程与自动化构建 gradle是一款最新的,功能强大的构建工具,它使用程序代替传统的XML配置,构建项目更加灵活.gradle有丰富的第三方插件. Gradle相关介绍及开发环境搭建 ...

  3. 下一代构建工具 Gradle ,比 Maven 强在哪里!

    作者 :乐百川 本文:toutiao.com/i6824937779193971207 相信使用Java的同学都用过Maven,这是一个非常经典好用的项目构建工具.但是如果你经常使用Maven,可能会 ...

  4. Java项目构建工具Gradle是否可以完全替代Maven?

    前言 在Java项目的开发中,需要引入自动化构建工具来帮助我们管理项目的外部依赖包.项目编译.打包等工作.Gradle和Maven是Java世界中两个重要的自动化构建工具,在项目中我们在两者之间如何选 ...

  5. 快70倍!新一代JS构建工具:ESBuild SWC浅析

    首先, ESBuild & swc是什么? ESBuild[1]是基于Go语言开发的JavaScript Bundler, 由Figma前CTO Evan Wallace开发, 并且也被Vit ...

  6. 基于 Groovy 的自动化构建工具 Gradle 入门(转)

    本人工作之初没有使用自动化构建,后来敏捷了,开始使用 Ant - 完全面向过程的定义步骤,不进行依赖管理.再发展到 Maven,面向对象的方式管理工程,有了依赖的管理,JAR 包统一从中央仓库获得,保 ...

  7. 【Groovy】构建工具 ( 构建工具引入 | Gradle 构建工具作用 | 传统的依赖管理 )

    文章目录 一.构建工具引入 二.Gradle 构建工具作用 三.传统的依赖管理 一.构建工具引入 构建工具 用于 管理代码项目的 依赖 , 编译 , 测试 , 发布 周期 ; 常见的构建工具 : An ...

  8. Java技术:项目构建工具Maven最佳替代者gradle介绍

    Maven作为一款非常流行的项目构建工具.基本上是每个Java程序员必备的工具,当然Maven有一些地方不足之处: 1. Maven的配置文件是XML格式的,如果你的项目工程依赖的包很多,那么XML文 ...

  9. vite构建工具初识

    一.什么是vite vite官网地址:https://cn.vitejs.dev/ Vite 是一个由 Vue.js 作者尤雨溪开发的新一代前端构建工具,它相比于传统的 webpack,具有更快的启动 ...

最新文章

  1. fasterrcnn深度学习口罩检测
  2. 合理规划您的硬盘分区
  3. 浅析商城网站建设需要注意哪些细节内容呢?
  4. hdu 5451 Best Solver 矩阵循环群+矩阵快速幂
  5. LDAP 查询基本知识
  6. 2014年Q1台湾域名总量涨幅增95.7% 净增1201个
  7. Beta阶段第2周/共2周 Scrum立会报告+燃尽图 10
  8. 大型云原生项目在数字化企业落地过程解密 1
  9. 训练的时候 nvidia:自动刷新
  10. [JAVA]字符串单词倒转处理前面的空格
  11. discard python_Python学习第三天
  12. python真的是吹过了-被吹的神乎其神的Python到底都能干什么
  13. CString Char* 转换 - C++学习
  14. tab切换之图片切换
  15. 腾讯笔试题之数字转换机
  16. Prometheus常用函数
  17. mysql 系统默认_mysql之系统默认数据库
  18. Redis启动和停止(Ubuntu)
  19. 基于STM32 + 超详细对新手全面解析讲解SPI协议(附源码)
  20. 十进制转化为二进制代码及流程图

热门文章

  1. 【Axure教程】中继器版投票原型
  2. HAWQ技术解析(十七) —— 最佳实践
  3. 第11课:五大职能定位
  4. 应用计算机软件matlab使用迭代法仿真激光谐振腔模式_【军工央企,津贴10万,包工作餐】中国航天科工集团光量子技术及应用总体部人才招聘...
  5. maven整合joss插件(一)
  6. matlab拟合曲线用什么,【Matlab】matlab如何使用拟合工具?matlab如何拟合曲线?matlab拟合工具cftool如何使用?...
  7. 数学建模学习笔记(三):数值计算方法
  8. 读书笔记 摘自:《让成长带你穿透迷茫》 俞敏洪
  9. 每日一题,每日一练。11车的可用捕获量(半夜两点在棋盘上左右横跳),
  10. STM32CubeMX配置SD卡+DMA+Fatfs文件系统