【Gradle】Gradle的概述与简单使用

一、概述

1.什么是Gradle?

Gradle 是一种构建工具

Java世界中主要有三大构建工具:Ant、Maven和Gradle。Ant几乎销声匿迹了,常见的就只有Maven和Gradle。

目前市面上Java开发,使用的构建工具基本都是Maven;安卓开发可能会使用到Gradle。

Maven的主要功能主要分为5点

  1. 依赖管理系统
  2. 多模块构建
  3. 一致的项目结构
  4. 一致的构建模型
  5. 插件机制

Gradle 是继Maven之后的新一代构建工具,它采用基于groovy的DSL语言作为脚本,相比传统构建工具通过XML来配置而言,最直观上的感受就是脚本更加的简洁、优雅

2.Gradle的优势

依赖管理:即将你项目中的jar包管理起来,你可以使用Maven或者Ivy的远程仓库、或者本地文件系统等(可以和Maven共用仓库

编译打包:可以通过脚本实现花样打包,包括修改文件、添加抑或排除某些类或资源、采用指定JDK版本 构建、打包后自动上传

多项目支持:Gradle对多项目有着良好的支持,比如一个很具有代表性的实践就是 Spring FrameworkSpring源码就是使用Gradle的!!!)

多语言支持:无论是 java、groovy、scala、c++都有良好的支持

跨平台支持:gradle是基于jvm的,只要有 jvm 你就可以让gradle运行

3.Maven与Gradle的区别

(1)灵活的的脚本:你可以使用groovy灵活的编写任务完成你想要做的任何事情

一方面是因为gradle使用的是groovy或者kotlin语言作为脚本的编写语言,这样极大的提高了脚本的灵活性, 但是其本质上的原因是 gradle的基础架构能够支持这种灵活性

(2)Gradle更快

Gradle 和 Maven 都支持并行的项目构建和依赖解析。

但是 gradle 有三个特点让其比Maven要更快!!!

a.增量构建

gradle为了提升构建的效率,提出了增量构建的概念,为了实现增量构建,gradle将每一个task都分成了三部 分,分别是input输入,任务本身和output输出。

增量构建的原理:监控input的变化,只有 input 发送变化了,才重新执行task任务,否则gradle认为可以重用之前的执行结果。

b.构建缓存

gradle可以重用同样 input 的输出作为缓存。

在同一个机子上这个与增量构建是同一个意思。但是缓存可以跨机器共享

也就是说,如果你是在一个CI服务的话,build cache将会非常有用。因为 开发者的 build 可以直接从CI服务器上面拉取构建结果,非常的方便。

c.Gradle守护进程

gradle会开启一个守护进程来和各个build任务进行交互,优点就是不需要每次构建都初始化需要的组件和服务。 同时因为守护进程是一个一直运行的进程,除了可以避免每次JVM启动的开销之外,还可以缓存项目结构,文件,task和其他的信息,从而提升运行速度。

我们可以运行 gradle –status 来查看正在运行的 daemons进程。

使用 Maven 与 Gradle 构建项目时间开销对比

二、Gradle安装配置

1.安装

环境:Win11、JDK8

官网下载地址:Gradle | Releases

更多版本下载地址:Gradle Distributions

一般下载 binary-only 即可。

2.配置

下载后解压,配置环境变量

新建GRADLE_HOME环境变量,将Gradle根目录配置

在 path 中加入项:%GRADLE_HOME%\bin

打开CMD,执行 gradle -v 

3.Gradle项目的Hello World

新建gradle项目

Gradle 项目的目录和 Maven 项目的目录几乎是一致的

build.gradle 文件中可以改一下镜像源,如下:

repositories {mavenLocal()maven {url 'https://maven.aliyun.com/repository/public'}mavenCentral()
}

项目结构

  1. 项目自动编译的时候要读取的配置文件。比如指定项目的依赖包等。 build.grade有两个,一个是全局的,一个是在模块里面。全局的build.grade主要设置的是声明仓库源,gradle的版本号说明等。
  2. linux下的gradle环境脚本,可以执行gradle指令,如:./gradlew build
  3. windows下的gradle环境,可以执行gradle指令
  4. 包含必要的一些设置,例如,任务或项目之间的依懒关系等,无论有多少个子模块,该文件只会有一个,且一定在根项目中;
  5. 包含wrapper文件夹及其2个子文件,作用是:可以自动安装gradle环境
  6. 程序源码 

三、Gradle的简单说明

1.Gradle的常用命令

帮助命令

gradle --help

查看版本

gradle -v

清空所有编译、打包生成的文件(即:清空build目录)

gradle clean

构建

gradle build

跳过测试构建构建

gradle build -x test

2.Gradle-Wrapper

当你新建的一个gradle项目时会发现,程序会下载一个wrapper相关的zip包

Gradle-Wrapper是简化 Gardle的安装和部署,出发点是让任意的gradle的项目都不需要单独安
装环境,项目会自动识别有无环境,如果在本地没有找到与 wrapper.properties版本相同的 Gar dle,IDEA就会帮你下载一个 gradle环境,官方的出发点是好的,下面我们来了解下这些配置的意
义。

3.项目依赖文件对比

Maven 项目的依赖配置文件是 pom.xml,而 Gradle 项目的依赖文件是 settings.gradle 和 build.gradle。
settings.gradle VS build.gradle
settings.gradle 文件是 gradle 项目的总体配置文件,一般会把子项目中通用的一些配置放在这个文件 中,有点类似于 maven 的 parent pom 文件,而 build.gradle 文件则是针对单个项目的具体配置,我 们主要使用的是 build.gradle 文件。build.gradle 配置内容如下:

从上述的配置文件可以看出,相比于 pom.xml 中的内容,build.gradle 还是要简洁很多的,它们 的对比如下图所示:

4.gradle中相关名词

1.group、name、version:group是module所在组;name是module的名字,同一个组里name具有唯 一性;version是module的版本号;group、name和version三者构成了该module的唯一性;
2.apply:在module中应用一个插件; 3.dependencies:用来声明module所依赖的jar包或其他module; 4.repositories:声明一个仓库,告诉程序到哪个仓库去找相应的module、jar包等依赖; 5.task:用来声明module的任务,其对应org.gradle.api.Task。

5.gradle项目

一个项目就代表一个正在构建的组件(比如一个jar文件),当构建启动后,Gradle会基于build.gradle 实例化一个org.gradle.api.Project类,并且通过project变量使其隐式可见。 因此build.gradle中的写法都是Groovy的简写 其还可以换种写法如下:

group 'com.thoughtworks' project.version = '1.0-SNAPSHOT'
apply plugin: 'java' project.apply plugin: 'war'

点击任意字段进入源码中,可以看到group、version、apply、repositories等都是 org.gradle.api.Project类中定义的方法;

6.依赖管理

下面来看看gradle的依赖管理功能,这也算是我们使用构建工具的主要目的之一了。这点也是gradle相 较maven的优势之一了。相较于maven一大串的XML配置,gradle的依赖项仅需一行。

7.打包项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/15534.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言程序设计——数据在内存中的存储

一、数据类型介绍 1.基本内置类型 char // 字符数据类型 1 B short // 短整型 2 B int // 整型 4 B long // 长整型 4 or 8 B long long //更长的整型 8 B float //单精度浮点型 4 B double //双精…

解决Unity的PostProcess奇怪报错

大家好,我是阿赵。   最近在使用Unity的PostProcess后处理效果的时候,发现了一个问题,下面记录一下这个问题的出现原因和解决办法。 一、出现问题 问题是这样出现的:   在场景里面添加某一个后处理效果后,当这个后…

C# PaddleInference OCR文字识别(只识别)

说明 C# PaddleInference OCR文字识别(只识别),没有文字区域检测、文字方向判断 测试图片是文字区域检测裁剪出来、处理过的图片 完整的OCR识别查看 C# PaddleInference OCR识别 学习研究Demo_天天代码码天天的博客-CSDN博客 效果 项目 …

idea集成maven-mvnd

maven-mvnd是什么? 参考文档: Maven加强版 — mvnd的使用测试 - 知乎https://blog.csdn.net/cr898839618/article/details/122319874 1.下载mvnd安装包 Releases apache/maven-mvnd GitHub 2.修改配置文件:安装包中的conf目录下的mvnd.…

C++之函数模板高级用法(一百五十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

rabbitmq使用springboot实现direct模式

一、 Direct模式 类型&#xff1a;direct特点&#xff1a;Direct模式是fanout模式上的一种叠加&#xff0c;增加了路由RoutingKey的模式。 二、coding Ⅰ 生产者 1、引入相应的pom文件 pom.xml <?xml version"1.0" encoding"UTF-8"?> <pro…

四十三、贪心——Huffman树、排序不等式

算法主要内容 一、Huffman树1、题目内容——合并果子2、算法思路&#xff08;1&#xff09;“合并果子”中的Huffman树&#xff08;2&#xff09;算法步骤&#xff08;3&#xff09;状态转移 3、题解 二、排序不等式1、题目内容——排队打水2、算法思路&#xff08;1&#xff0…

科研论文中SCI,SSCI ,CSSCI是什么

目录 1 SCI 2 SSCI 3 CSSCI 什么是SCI&#xff0c;SSCI &#xff0c;CSSCI 目前&#xff0c;在国际科学界&#xff0c;如何正确评价基础科学研究成果已引起越来越广泛的关注。而被SCI、SSCI收录的科技论文的多寡则被看作衡量一个国家的基础科学研究水平、科技实力和科技论文水平…

STM32——关于时钟源的实际使用及解释

1、STM32内部有5个时钟源&#xff0c;分别为HSI、HSE、LSE、LSI、PLL。 HSE&#xff1a;高速外部时钟&#xff0c;可接石英谐振器、陶瓷谐振器&#xff0c;或者接外部时钟源&#xff0c;其频率范围为4MHZ~16MHZ。 LSE&#xff1a; 低速外部时钟&#xff0c;接频率为32.768KHZ…

基于深度学习的高精度Caltech行人检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度Caltech数据集行人检测识别系统可用于日常生活中或野外来检测与定位行人目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的行人目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv…

电源频率检测器/采用555时基电路的过流检测器电路设计

电源频率检测器 对于某些电子仪器和电气设备&#xff0c;对见六电源的频率有着一定的要求&#xff0c;电源频率高于或低于 50Hz&#xff0c;都会影响设备的正常工作&#xff0c;甚至造成仪器和设备的损坏。因此&#xff0c;对于此类设备需要装设电源频率检测装置&#xff0c;当…

软件工程师,学习下JavaScript ES6新特性吧

概述 作为一名软件工程师&#xff0c;不管你是不是前端开发的岗位&#xff0c;工作中或多或少都会用到一点JavaScript。JavaScript是大家所了解的语言名称&#xff0c;但是这个语言名称是Oracle公司注册的商标。JavaScript的正式名称是ECMAScript。1996年11月&#xff0c;JavaS…