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

news2024/11/14 13:35:08

一、概述

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.coloradmin.cn/o/736588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zabbix 的使用 续

Zabbix 的使用 续 一、部署 zabbix 代理服务器1.1 环境准备1.2 设置 zabbix 的下载源,安装 zabbix-proxy1.3 部署数据库,要求 MySQL 5.7 或 Mariadb 10.5 及以上版本1.4 导入数据库信息1.5 修改 zabbix-proxy 配置文件1.6 启动 zabbix-proxy1.7 在所有主…

Linux基础工具大全

今天,我带来Linux的基本工具大全。 目录 Linux 软件包管理器 yum软件包的概念查看软件包软件包的名称如何安装软件如何卸载软件更新yum源 Linux编辑器-vimvim的概念vim的几种模式vim的基本操作vim正常模式命令集vim末行模式命令集vim操作总结 Linux编译器-gcc/g的使…

AMCV761、AMC06电液伺服阀放大器

AMCV102、AMC106A、AMCV761、AMC06、AMC16、AMC12、AMC07、AMC13电液伺服阀双喷嘴一档板、干式力矩马达、力反馈八种基本形式,流量范围 1-400L/min、额定油压力 25Mpa 与服油缸或马达一起,用于位置、速度、加速度和力值控制。外置伺服放大器。型有抗污染…

C语言 指针进阶(一)

目录 一、字符指针 二、指针数组 通过类比的方法来认识指针数组 2.1指针数组的一般形式 2.2指针数组模拟实现二维数组 三、数组指针 通过类比的方法来认识数组指针 3.1数组指针的一般形式 3.2&数组名VS数组名 3.3数组指针的使用 四、数组参数、指针参数 4.1一维数…

Socket编程接口API并实现简单的TCP网络编程

#include <sys/types.h> #include <sys/socket.h> socket()创建套接字&#xff0c;成功返回套接字的文件描述符&#xff0c;失败返回-1 domain: 设置套接字的协议簇&#xff0c; AF_UNIX AF_INET AF_INET6 type: 设置套接字的服务类型 SOCK_STREAM SOCK_DGRAM prot…

云计算运维工程师需要会哪些技术

目前处于云年代&#xff0c;云计算运维工程师的工作远景还是十分广泛的。像是阿里云计算&#xff0c;滴滴&#xff0c;抖音等等互联网大厂目前都在使用云计算技能。 云计算运维工程师的薪资水平也十分可观。 运维工程师(Operations)&#xff0c;在国内又称为运维开发工程师(D…

一文弄懂Java日志框架

文章目录 日志的概念日志门面JUL日志框架JUL架构入门案例日志的级别Logger之间的父子关系日志的配置文件日志原理解析 LOG4J日志框架Log4j入门Log4j组件LoggersAppendersLayouts Layout的格式Appender的输出自定义Logger JCL日志门面JCL入门JCL原理 SLF4J日志门面SLF4J入门绑定…

风控策略基本功 | 授信额度(上)

通过调整额度&#xff0c;银行可以根据客户的实际情况和风险水平&#xff0c;灵活地匹配资金需求和风险承受能力。有助于确保风险控制、提高资金利用效率&#xff0c;并满足客户的需求。有效的额度调整能够避免过度或不足的授信&#xff0c;最大程度地降低违约风险&#xff0c;…

水印抹除算法总结

基本是从图片抹水印和视频抹水印两个方向 Video Inpainting&#xff1a;https://paperswithcode.com/task/video-inpaintingImage Inpainting&#xff1a;https://paperswithcode.com/task/image-inpainting 请根据目录查看 图片 Partial Conv 部分卷积层 源自于Image In…

Github Pages

官方教程&#xff1a;https://pages.github.com/ 1 创建仓库 命名为 你的名字.github.io 克隆项目 git clone https://github.com/username/username.github.io加入index.html页面 在克隆的项目中&#xff0c;加入一个index.html html文件简单写几个dom <!DOCTYPE html…

Redis - 附近商铺、用户签到、UV统计

文章目录 附近商铺、用户签到、UV统计一、附近商铺1.1 GEO数据结构1.2 导入店铺数据到GEO1.3 实现附近商户功能 二、用户签到2.1 BitMap2.2 签到功能2.3 统计连续签到2.3.1 分析2.3.2 代码实现 三、UV统计3.1 HyperLogLog用法3.2 测试百万数据的统计 附近商铺、用户签到、UV统计…

康复锻炼改善帕金森病人的功能障碍,你知道多少?快来学习!

帕金森病是一种神经系统退行性疾病&#xff0c;主要特征是肌肉僵硬、震颤和运动障碍等症状。虽然这个病无法彻底治愈&#xff0c;但通过康复锻炼可以显著改善患者的功能障碍。 首先&#xff0c;康复锻炼可以改善帕金森病人的肌肉僵硬。这种运动障碍是由于黑斑核和大脑皮层之间的…

RV1126笔记三十八:PaddleOCR部署到RV1126

若该文为原创文章&#xff0c;转载请注明原文出处。 一、环境 1、硬件&#xff1a;正点原子RV1126开发板 2、环境&#xff1a;ubuntu16.04 二、模型转换 训练后的模型不能直接使用在RV1126,需要转换一下模型 1、PaddlePaddle的模型转成推理模型 在前面有提过了&#xf…

三次样条曲线的偏移计算方法比较

最近&#xff0c;我不得不想出一种方法&#xff0c;从三次 Hermite 样条曲线创建平行曲线&#xff0c;例如铁路车道。 首先&#xff0c;我只是沿着法线方向移动它们的开始/结束控制点&#xff0c;同时保持相同的开始/结束切线。 它在大多数情况下工作得很好&#xff0c;因为我的…

Qt画图框架,实现自己的画图框架

前面也讲到Qt提供画图框架&#xff0c;经典MVC模型&#xff0c;也没有什么问题。但Qt仅提供框架性东西&#xff0c;很难落地&#xff0c;很难应用在实际项目当中&#xff0c;一般需要自己捋一遍&#xff0c;这样才能理解好 什么view&#xff0c;canvas都好理解&#xff0c;只要…

Elasticsearch【文档操作、搜索操作、入门案例】(五)-全面详解(学习总结---从入门到深化)

目录 原生JAVA操作ES_文档操作 原生JAVA操作ES_搜索操作 SpringDataES_入门案例 原生JAVA操作ES_文档操作 新增&修改文档 Test public void addDocument() throws IOException {// 1.创建客户端对象&#xff0c;连接ESRestHighLevelClient client new RestHighLevelC…

API安全基础理论

1.什么是API API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制的细节。通过淘宝API&#xff0c;就…

测试完OLED屏对比LCD屏后:液晶面板拥趸们无话可说了

关于笔记本的屏幕&#xff0c;从大的技术上来分类可以分成两类&#xff0c;一种是OLED材质&#xff0c;另外一种是LCD材质。前些年的笔记本基本都采用的是LCD材质&#xff0c;但近几年随着OLED屏幕的崛起&#xff0c;大多数笔记本都采用了OLED材质。 那么&#xff0c;你知道LCD…

ChatGPT能为留学生做什么?错误使用有何后果?

随着AI人工智能行业的迅速发展&#xff0c;越来越多的学生开始利用ChatGPT等软件来获得更高效便利的论文和作业辅助。 然而&#xff0c;我们需要认识到一个严肃的问题&#xff1a;学生是否过度依赖AI助手来完成毕业论文。 近期出现的Turnitin AI Detector是一个用于帮助教师确…

Xamarin.Android | 界面跳转到手机自带的自启动管理界面,引导用户将APP加入自启动

Xamarin.Android | 界面跳转到手机自带的自启动管理界面&#xff0c;引导用户将APP加入自启动 文章目录 Xamarin.Android | 界面跳转到手机自带的自启动管理界面&#xff0c;引导用户将APP加入自启动前言示例代码自启动界面URI字典打开自启动管理界面 结束语 前言 很多 Androi…