Maven和Gradle的区别

首先谈谈为什么要学习Maven?

依赖管理

大家还记得在学习JavaWeb时需要向web项目中引入少许jar包嘛?还记得引入jar包的繁琐过程嘛?实际项目中可能光基座需要引入的jar包就成千上万,jar包从哪里获取也是一个问题。项目中的jar包不仅数量庞大,彼此之间存在着错综复杂的依赖关系,如果程序员需要手动梳理是需要极大的学习成本,且这些工作对实现业务功能毫无帮务。开发人员应该将精力集中投入于业务上,不应该投入大量的时间在依赖管理上。

构建管理

项目的构建,简单解释一下就是将项目编译且打包,用于部署。当我们在通过Idea启动项目时,这些工作都是由Idea工具帮我们无感知的实现了,但实际开发中项目是要上环境的,脱离IDE环境如何实现呢~

此时实际开发中构建过程如下图所示,开发人员大多数只操作以下三步即可

  1. 开发人员在本地环境完成编码工作且自测通过
  2. 提交代码于远程仓库(通常是企业部署的gitlab)
  3. CI/CD控制面板上选择分支部署项目(常用的如Jenkins、TeamCity、云效等)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vjgAjJOA-1680168225914)(Maven小白.assets/image-20230218205017192.png)]

简而言之,需要专门的工具去做依赖管理和构建管理。

什么是Maven?

Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供构建依赖管理支持的工具。

这里在详细的解释一下两个关键词:

构建

比如说去便利店买一杯冰美式,顾客只需要知道购买哪个产品,并不知晓产品的构建过程。构建就是将原材料整合一起制作成产品的过程。

Java项目构建过程包含的主要的环节如下

  1. 清理:删除上一次构建的结果,为下一次构建做好准备

  2. 编译:Java 源程序编译成 *.class 字节码文件

  3. 测试:运行提前准备好的测试程序

  4. 报告:针对刚才测试的结果生成一个全面的信息

  5. 打包(jar包、war包)

  6. 安装:把一个 Maven 工程经过打包操作生成的 jar 包或 war 包存入 Maven 仓库

  7. 部署

    • 部署 jar 包:把一个 jar 包部署到 Nexus 私服服务器上

    • 部署 war 包:借助相关 Maven 插件(例如 cargo),将 war 包部署到 Tomcat 服务器上

依赖

如果 A 工程里面用到了 B 工程的类、接口、配置文件等等这样的资源,那么我们就可以说 A 依赖 B。

例如:在当前项目上开发一个有关Excel导入导出的功能,阿里开源了EasyExcel这个工具项目包(当然大佬的你可以选择自己编码实现,但老板着急要),当前项目引入EasyExcel工具包快速实现导入导出的业务功能。此时当前项目依赖于EasyExcel工具。

依赖管理中要解决的具体问题:

  • jar 包的下载:使用 Maven 之后,jar 包会从规范的远程仓库下载到本地
  • jar 包之间的依赖:通过依赖的传递性自动完成
  • jar 包之间的冲突:通过对依赖的配置进行调整,让某些jar包不会被导入

Maven的工作机制Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供构建依赖管理支持的工具。

这里在详细的解释一下两个关键词:

构建

比如说去便利店买一杯冰美式,顾客只需要知道购买哪个产品,并不知晓产品的构建过程。构建就是将原材料整合一起制作成产品的过程。

Java项目构建过程包含的主要的环节如下

  1. 清理:删除上一次构建的结果,为下一次构建做好准备

  2. 编译:Java 源程序编译成 *.class 字节码文件

  3. 测试:运行提前准备好的测试程序

  4. 报告:针对刚才测试的结果生成一个全面的信息

  5. 打包(jar包、war包)

  6. 安装:把一个 Maven 工程经过打包操作生成的 jar 包或 war 包存入 Maven 仓库

  7. 部署

    • 部署 jar 包:把一个 jar 包部署到 Nexus 私服服务器上

    • 部署 war 包:借助相关 Maven 插件(例如 cargo),将 war 包部署到 Tomcat 服务器上

依赖

如果 A 工程里面用到了 B 工程的类、接口、配置文件等等这样的资源,那么我们就可以说 A 依赖 B。

例如:在当前项目上开发一个有关Excel导入导出的功能,阿里开源了EasyExcel这个工具项目包(当然大佬的你可以选择自己编码实现,但老板着急要),当前项目引入EasyExcel工具包快速实现导入导出的业务功能。此时当前项目依赖于EasyExcel工具。

依赖管理中要解决的具体问题:

  • jar 包的下载:使用 Maven 之后,jar 包会从规范的远程仓库下载到本地
  • jar 包之间的依赖:通过依赖的传递性自动完成
  • jar 包之间的冲突:通过对依赖的配置进行调整,让某些jar包不会被导入

Maven的工作机制

在这里插入图片描述

Maven 和 Gradle 的区别?

Java世界中主要有三大构建工具:Ant、Maven和Gradle。经过几年的发展,Ant几乎销声匿迹、Maven是用的普遍的一种,而Gradle目前也越来越受追捧。Maven与Gradle在使用中各有千秋,根据使用场景择优用之。

Maven:

  • 稳定可靠,插件众多。(这么多年版本一直维持在3.XX,而且很久才发布一次小更新,说明他稳定且bug较少;
  • 配置略显啰嗦,自定义逻辑较麻烦(Maven使用xml的方式进行配置,xml的劣势繁琐就会体现在Maven上);
  • 性能问题,使用Maven构建的项目都会经过几个生命流程,内部没有缓存机制,项目越来越大重新构建所花费的时间也就越长;
  • 由于Maven的开发基本靠社区支持,没有更多的资金用于继续开发维护Maven,导致开发基本停泻。

Gradle:

  • Gradle采用代码逻辑的方式进行构建,使得它能更加的灵活。
  • Gradle内部存在缓存机制(当文件输入和输出都没改变的情况下,认为这就是没变的代码,直接进行输出。但当你改变的依赖包版本,它有时并没更新,也是缓存机制的问题),相比会快些。
  • 开发活跃,版本太多

初级开发的咱们当然是公司指定用啥咱们就用啥啦,适当的了解也会起到一定的帮助~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT写作文章-快速使用ChatGPT不用注册方式

如何更好地使用ChatGPT批量生成文章:详细教程 作为一款强大的文本生成器,ChatGPT可以帮助您快速、高效地批量生成文章。但如果您还不知道如何更好地使用ChatGPT,那么这篇详细的列表教程将会指导您如何使用它来生成高质量的文章,提…

“工业转型,大势所趋”:ITES深圳工业展暨阿里巴巴1688工业采购节开幕

2023年以来,中国制造业快速发展、需求深度释放,创造了大量的产业机遇。与此同时,国内外社会经济发展不确定因素众多,制造类企业、专业买家呼唤提升发展确定性;面临时代变局,工业品市场渴望在发展模式、合作…

华为OD机试题,用 Java 解【删除指定目录】问题 | 含解题说明

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:删除指定目录 题目 某文件系统…

JDK 中用到了哪些设计模式?

以下是整理的⼏个在JDK 库中 常⽤的⼏个设计模式。桥接模式这个模式将抽象和抽象操作的实现进⾏了解耦,这样使得抽象和实现可以 独⽴地变化。 在Java 应⽤中,对于桥接模式有⼀个⾮常典型的例⼦,就是应⽤程序使⽤ JDBC 驱动程序进⾏开发的⽅式…

Node.js 中的线程 与 并发

Node.jsNode.js 中的线程 与并发jcLee95 :https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/129784985 目 录1. JavaScript 与线程1.1 Java…

8种特“坑”的 SQL 写法,性能降低100倍

给大家分享几个SQL常见的“坏毛病”及优化技巧。 SQL语句的执行顺序: 1、LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般 DBA 想到的办法是在 type、 name、 create_time 字段上加组…

春分-面试

青岛 zc: 1.String的类型 string、stringbuilder 、stringbuffer? String不可变、另外两个可变、StringBuilder线程不安全、但是效率高、并且String不能被继承。 JVM是C写的编译后的机器码, 2.集合类的用法,还问了键值对。key如果…

06solr 文件删除

文章目录 0x01 漏洞介绍0x02 影响版本0x03 漏洞环境0x04 漏洞复现0x05 修复建议摘抄免责声明0x01 漏洞介绍 Apache Solr 存在任意文件删除漏洞,在目前的最新版本(8.8.2)中仍然未被修复,漏洞的根本成因是函数 **Files.deleteIfExists()**对要删除的文件名并未做校验。同时 Apa…

小程序面试题(day07)

文章目录前言微信小程序自定义tabbar的理解?微信小程序怎么缓存数据?微信小程序怎么进行网络请求?微信小程序路由跳转以及传参如何实现?微信小程序生命周期的理解?微信小程序模块化?微信小程序所有api放在哪…

高并发系统设计:缓存、降级、限流、(熔断)

高并发系统设计:缓存、降级、限流、(熔断) 在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。 非核心服务可以采用降级、熔断,核心服务采用缓存和限流(隔离流量可以最大限度的保障业务无损)。 缓存 缓…

Scala隐式转换

Scala 的隐式转换是一种自动类型转换机制,它可以在编译器自动插入一些代码,将一个类型自动转换成另一个类型。这种转换可以发生在函数调用、赋值、类型转换等多种场景中。 隐式转换的机制可以让 Scala 代码更加简洁、优雅。例如,我们可以通过…

“体育游戏第一股”投资未来,望尘科技走向价值兑现周期

2022年的游戏市场,遗憾以疲弱之势落下帷幕。游戏市场规模与用户数量,均出现了小幅下降,显示出存量市场的典型特征。 但与此同时,更多垂直领域的拳头产品、响应市场需求的精品游戏,却屡屡掀起热潮。去年随世界杯而来的…

Darknet-YOLOv4训练步骤

1、打开终端,克隆项目 git clone https://github.com/AlexeyAB/darknet.git2、修改Makefile文件 其中,GPU和CUDNN是GPU加速,CUDNN_HALF是特定硬件加速,OPENCV是否使用OpenCV,AVX和OPENMP是CPU加速opencv编译问题htt…

JavaScript常用知识点

1-包装数据类型 一个基本数据类型当你使用的时候会自动转换成复杂数据类型,当你使用完毕,会自动转换为基本数据类型 比如 字符串 string是基本数据类型,但是它可以使用 length这个方法 ,就是因为字符串也是一个包装数据类型&…

Spring整合

Spring整合6,Spring整合6.1 Spring整合Mybatis思路分析6.1.1 环境准备步骤1:准备数据库表步骤2:创建项目导入jar包步骤3:根据表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.properties文件步骤7:添加Mybatis核心配置文件步骤8:编写应用…

Canny 边缘检测算法-python实现(附代码)

文章目录1、调用opencv进行canny边缘检测2、图像灰度化3、高斯模糊处理4、图像梯度、梯度幅值、梯度方向计算5、NMS(非极大值抑制)6、双阈值的边界选取摘要 : Canny 边缘检测算法由计算机科学家 John F. Canny 于 1986 年提出的。其不仅提供了算法&#…

【Python】更精美的俄罗斯方块开发指南(步骤已写)

文章目录前言一、游戏介绍二、源码剖析1.引入库2.读入数据总结前言 最近想找一些Python相关的游戏开发例子,正好在itch.io上闲逛看到这个俄罗斯方块项目,瞬间被惊艳到了。作者是 Mikhail ,项目(tetris_for_two)地址是: https://g…

数据库原理及应用(四)——SQL语句(2)SQL基础查询以及常见运算符

一、SELECT语句基础 数据库查询是数据库的核心操作&#xff0c;SELECT 语句用于从数据库中选取数据。 SELECT [ALL/DISTINCT] <列名>,<列名>...FROM <表名或视图名>,<表名或视图名>[WHERE <条件表达式>][GROUP BY <列名1> [HAVING <条…

Jetpack compose:炫酷的按钮点击效果

Jetpack compose&#xff1a;炫酷的按钮点击效果 屏幕的每个组件在与用户交互时都有其给用户反馈的方式。例如&#xff0c;当用户触摸 Toggle 按钮时&#xff0c;它会更改其状态以响应交互。这种交互给用户一种感觉。 在此博客中&#xff0c;我们将实现一些自定义点击效果&…

Air700E开发板|移芯EC618|4G Cat.1模组:概述及PinOut

文章目录基础资料概述主要功能外设分布PinOut&#xff08;管脚定义&#xff09;管脚功能说明固件升级正常开机模式&#xff1a;下载模式&#xff1a;IO 电平选择基础资料 Air700E文档中心 概述 EVB-Air700E 开发板是合宙通信推出的基于 Air700E 模组所开发的&#xff0c;包含…