Maven与Gradle差异

news/2024/9/19 3:21:26/ 标签: maven, java

作为Java 开发者,你平时用 Maven 还是 Gradle?

我一直用的都是 Maven,但是前几天做了一个小项目,用的是 Gradle,因工作需要就去了解了Gradle的相关信息。

直到看到 Spring 和 Spring Boot 都从 Maven 切换到 Gradle了。就很好奇Gradle有多厉害,让 Spring 团队都抛弃 Maven 了。

为什么Spring会选择放弃原本使用的Maven,而转向使用Gradle呢?考虑到Spring项目的规模,这样的迁移并非小事,也是在许多人的协助下(包括Gradle团队成员)才能顺利完成的。根据官方的说法,这一转变主要是为了缩短构建时间。事实上,构建速度是Gradle相较于Maven的一个显著优点,特别是对于大型项目而言。

Maven

Maven 是一个项目管理和构建工具,主要用于 Java 项目的构建、依赖管理和项目生命周期管理。Maven 的核心是包管理工具,至于项目构建其实是依靠插件来完成的,比如 maven-compiler-plugin插件等。

Maven 遵循“约定优于配置”的原则,提供了一套默认的项目结构和构建流程。如果开发者遵循这些约定,Maven 就能自动处理很多配置工作,从而减少开发者的配置负担。

Maven 使用 XML 文件的形式管理依赖包,也就是项目中的 pom.xml,整个 XML 文件的格式都是固定的,仓库怎么引入、依赖怎么引入、插件怎么引入都是约定好的,照着做就好了,一个项目的 pom 文件,复制到另一个项目中,改一下包依赖、改一下基本项目信息,其他的基本完全复用。

Gradle

Gradle 是一个构建自动化工具,广泛用于软件项目的构建、依赖管理和项目生命周期的管理。它最初是为了构建 Java 项目而设计的,但如今它支持多种编程语言和技术,包括 Java、Kotlin、Groovy、Scala、Android 等。

其在自动化构建能力上更强,包管理只是其中的一个功能。

Gradle 采用基于 Groovy 或 Kotlin 的领域特定语言(DSL),允许开发者通过编写脚本来自定义构建过程。相比其他构建工具(如 Maven),Gradle 更加灵活和强大。这就是它灵活性所在,但是也是它的门槛所在,也就是说你要使用它,还要理解 Groovy 或 Kotlin,理解的不到位可能会带来很多问题。这也是很多人吐槽它的原因,过于灵活的副作用就是门槛过高。

优缺点比较

其实通过上面的介绍也能看出一些端倪了。

学习门槛

首先在学习门槛上,显然 Gradle 更高。一般项目, Maven 加几行 XML 就行了,构建插件也就那么几个,只需要复制粘贴就可以了,而 Gradle 中多少要了解一点 Groovy 或 Kotlin 吧。

灵活性

Gradle 的灵活度更高,Maven 则是中规中举。如果你的构建行为比较复杂,可能纯靠 Maven 自己的配置文件没办法实现,就需要你自己写一些辅助脚本了。而用 Gradle 的话,你可以使用它的 DSL 能力定制非常复杂的构建流程。

性能

这个不得不承认,Gradle 的性能更高。据官方介绍,一般的项目使用 Gradle 构建的速度是Maven 的至少2倍,而一些大型项目的复杂构建,在极端情况下能达到 Maven 的100倍,这好像有点儿夸张了,不过快几倍应该是有的,这也是为什么 Spring 切换到 Gradle 的理由,切换到 Gradle 后,构建时间大概是20多分钟,可想而知,使用 Maven 的话,应该要一个小时以上了。

性能好是有代价的,除了原理不一样外,Gradle 会有一些后台进程,所以,对于一些性能不怎么样的开发机来说,使用 Gradle 反而会觉得卡。

用户体验

用户体验是个很主观的东西,有人就觉得 Maven 好,即使慢一点,也是它好。有人就觉得 Gradle 好,灵活,而且门槛高,用它说明我技术好啊。

但是 Maven 的稳定性是非常好的,一个 Maven 3.5 用好几年也没啥问题,但是 Gradle 不一样,好多版本是不做兼容的。比如我本地安装了新版本,但是有一个项目用的是老版本,那很可能这个项目是没办法跑起来的,只能去安装和这个项目适配的版本。这也是 Gradle 被疯狂吐槽的一个点,即使是 Gradle 用户。

最后

Gradle和Maven两种构建方式存在一些根本差异,选择哪种构建工具取决于我们的实际需求。Gradle功能更强大,但是,有时候一个中小型的项目不需要它提供的大多数功能,则Maven可能就是最佳选择。而Gradle则是大型项目的最佳选择。如果一直在使用Maven,但发现项目越来越大,已经不适合使用Maven,这时候就可以从Maven迁移到Gradle。总而言之,Maven和Gradle两种构建工具有各自的优缺点。


http://www.ppmy.cn/news/1520627.html

相关文章

IPSec 参数

IPSec抗重放: 抗重放窗口: ChatGPT 说: ChatGPT 在 IPSec(Internet Protocol Security)中,“抗重放”机制是一种用于防止重放攻击的安全功能。重放攻击是一种攻击形式,攻击者捕获合法的网络通…

大数据技术之Flume 参数调优(12)

目录 1. Source 调优 增加 Source 个数 调整 batchSize 参数 2. Channel 调优 选择 Channel 类型 配置 dataDirs 参数 设置 Capacity 和 transactionCapacity 参数 3. Sink 调优 增加 Sink 个数 调整 batchSize 参数 4. Flume 的事务机制 事务处理 5. 数据丢失与重…

Linux中的编译器gcc/g++

目录 一、gcc与g的区别 1.gcc编译器使用 2.g编译器使用 二、gcc/g编译器编译源文件过程 1.预处理 2.编译 3.汇编 4.链接 三、静态库和动态库 1.库中的头文件作用 2.静态库 3.动态库 四、gcc编译器的一些选项命令 一、gcc与g的区别 gcc用于编译C语言代码&#xff…

Power Automate向Power Apps传Table数据

Flow返回查询的数据表并返回Apps 场景介绍代码开发Power Automate开发数据库Power Automate调用存储过程 Power Apps开发代码开发 测试 场景介绍 我们通常会使用Flow 查询数据表然后Apps端将表中的数据显示出来,我们怎么来传呢,它自带的response for Po…

揭秘GLM-130B爆火秘诀:颠覆性自回归填空和二维位置编码的训练黑科技

GLM(通用语言模型)的训练过程确实复杂,尤其是涉及到其独特的预训练目标和架构调整。让我来详细解释一下GLM的训练过程。 1. 模型架构简介 GLM-130B 是基于 Transformer 架构的双语(中文和英文)语言模型,拥…

仕考网:应届生考公务员的优势

应届生报考公职存在显著优势,建议大家充分利用这一身份: 1.政策优惠 在不缴纳社保的前提下,应届毕业生可在两年内利用此身份参与各类公职考试。国考及省考中,大量岗位专为应届生设置,其中国考约有三分之一的职位仅限…

解除本地Git仓库与远程仓库关联

清除Git凭据缓存 Git在本地会缓存你的认证信息,以便在后续操作中自动使用。你可以通过以下步骤来清除这些缓存的凭据: 对于Windows用户: 打开“控制面板”并选择“凭据管理器”(Credential Manager)。在“Windows凭据…

C#如何使用外部别名Extern alias

说到 extern 关键字,只是很简单告诉大家用来做区分两个不同 dll 有相同的命名空间和类,可以使用这个关键字。 在遇到了存在两个 dll 都有相同的命名空间,而且有相同的类的时候,如何同时使用这两个 dll 的类。 这里有两个库 Jall…

通俗易懂理解Java枚举类

什么是枚举 一组常量。 比如一年的 4 个季节,一年的 12 个月份,一个星期的 7 天,方向有东南西北等。 Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。 例如定义一个颜色的枚举类。 enum Color { RED, GREEN, …

C++菜鸟教程 - 从入门到精通 第一节

一.C简介 C 是一种编程语言,它是由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的。C 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言。C 可运行于多种平台上,如 Windows、MAC 操作系统以及 UNIX 的各种版本。 C 是一种…

MongoDB之MongoDB Compass工具

MongoDB Compass 是 MongoDB 官方提供的一款图形化用户界面 (GUI) 工具,用于与 MongoDB 数据库进行交互和管理。Compass 提供了丰富的功能,能够帮助开发者、数据库管理员以及数据分析师轻松管理和分析 MongoDB 数据。以下是对 MongoDB Compass 的详细介绍…

Go语言 Go程基础

本篇文章主要为Go语言 Go程基础内容介绍及代码示例。 目录 并发与并行 Go程介绍 简单go程示例 匿名函数写法 启动多个子go进程 总结 并发与并行 并发:电脑同时听歌,看小说,看电影。cpu根据时间片进行划分,交替执行这个三个…

Windows安装docker,启动ollama运行open-webui使用AIGC大模型写周杰伦歌词

Windows安装docker,启动ollama运行open-webui使用AIGC大模型写周杰伦歌词 1、下载docker的Windows版本。 docker下载地址: https://docs.docker.com/desktop/install/windows-install/https://docs.docker.com/desktop/install/windows-install/ 2、设…

java基础知识-JVM知识详解

一、JVM内存结构 Java虚拟机(JVM)的内存结构主要分为几个不同的区域,每个区域都有其特定的目的和功能。以下是JVM内存结构的主要组成部分: 先看一下总体的结构图 程序计数器(Program Counter Register) 这是一个较小的内存块,用于存储当前线程所执行的字节码指令的地址…

tomato靶机通关攻略

主机发现 用kali去扫描端口,发现有3个开放端口 访问网站 在kali里面进行目录扫描,找到一个antibot_image 找到一个/antibot_image/ 目录,进而找到/antibots/目录 发现可能存在文件包含 页面通过image传参查看passwd文件 页面通过image传参查…

Linux 虚拟网络三大基石:Namespace、Veth pair 与 Bridge

引言 在 Linux 的世界里,虚拟网络技术是系统管理、云计算和容器化不可或缺的一部分。今天,我们将深入探讨构建这些虚拟网络的三大基石:Namespace、Veth 对和 Bridge,揭示它们如何在背后默默支撑起你的网络环境。 Namespace&…

区块链入门

1.1 区块链技术的发展 随着 2008 年比特币(Bitcoin) 的发明,一个被称为区块链(Blockchain) 的新概念进入了人们的视野,这项新技术据信有可能彻底改变整个社会。 区块链有望对每个行业产生颠覆的影响,包括但不限于 IT、金融、政府、媒体、医疗、法律和艺术等。一个流派将区…

速盾:防御ddos攻击的几大有效方法是什么?

DDoS攻击(分布式拒绝服务攻击)是一种恶意攻击手段,旨在通过向目标服务器发送大量的请求,使其无法正常响应正常用户的请求。这种攻击会耗尽服务器的带宽和资源,导致服务不可用。为了保护网络安全,防御DDoS攻…

线性代数 -- 矩阵求导

Tips:本文为理解神经网络的前置知识,整体内容并不全,相关内容还需后续进一步完善。 一、基础 1、标量、向量和矩阵 标量:只有大小,没有方向的量 向量(欧几里得向量):具有大小和方向…

Redis Desktop Manager 0.8.8.384 安装与使用详解

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…