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内部存在缓存机制(当文件输入和输出都没改变的情况下,认为这就是没变的代码,直接进行输出。但当你改变的依赖包版本,它有时并没更新,也是缓存机制的问题),相比会快些。
  • 开发活跃,版本太多

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值