Maven Or Gradle?究极实测对比,孰强孰弱一看便知!

Posted 14 September 2021

我们习惯了使用Maven构建工具,现在市面上大多数也都是使用的Maven,但是Gradle的出现,究竟哪个更好用哪个更有优势呢?

下载安装,可见原博客

相同之处
  • 工具的作用相同:都是项目管理工具,都可以解决构建管理、依赖管理问题、项目自动化打包部署等操作。
  • 依赖管理思想相同:用GroupID(组id)、ArtifactID(项目id)和Version(版本号)配合为唯一标识一个依赖项。
  • 存储仓库思想相同:远程中央仓库(世界公用)、本地仓库(本地计算机上可创建)和私服(公司搭建的仓库)。
  • 多模块构建思想相同:都可以对整个项目或其中特定子项目中进行配置。
  • 项目目录结构相同:source、resource、test source、test resource等相应资源的标准结构。

普通Java项目目录结构:

普通Java项目目录结构:

不同之处
  • 诞生时间,诞生原因不同--Maven于2004年诞生,Gradle于2012年。 Maven出现是为了解决2000年诞生的项目构建工具:Ant存在的问题 而Gradle出现也是为了解决Maven存在的问题。
  • 项目构建方式不同--maven使用xml文件配置项目,Gradle在build.gradle文件中配置
  • 配置细节不同--scoup依赖作用范围、动态依赖版本、多模块依赖、配置继承、插件管理
  • 执行原理不同
构建速度比较

我们对于同一个项目使用不同的构建工具,一起来测试一下相同操作的的时间。
我简单写了几个.java源码,maven项目和gradle项目代码、目录结构、依赖坐标都相同。我们对同一种操作多次尝试运行–

1,clean
Maven:125ms
Gradle:25ms

2,compile
Maven:450ms
Gradle:34ms

3,test
Maven:739ms
Gradle:325ms

4.install
Maven:885ms
Gradle:65ms

工作原理:

他们虽然都是使用Java开发的工具,但为什么Gradle的速度更快呢?因为执行原理不同,因为Maven和Gradle核心代码都是用Java语言编写的,所有他们执行任何任务(Lifecycle)都是启动一个JVM进程。一个JVM的启动是很慢,因为需要加载所有的jar包,但是区别:
Maven:要执行一个任务(如compile),需要启动一个JVM进程,任务完成后,JVM进程销毁。
Gradle:要执行一个任务(如compile),首先会启动一个ClientJVM,它非常轻量,负责接收、转发请求,只去后台链接称为DaemonJVM通信,把任务和参数发送给Daemon,Daemon执行结束后,结果返回给ClientJvm。
然后ClientJVM被销毁,而Daemon则会一直存在,默认存在3小时,如果需要多次运行,只需要第一次预热,减少了启动开销。如下图:
另外:
gradle在多个版本的同一个类型jar包选择中,如果有版本高的,他会默认选择最高版本的jar,可能会出现间接依赖的高版本的包出现编译报错。
可使用force=true,来强制指定某个版本的jar包。

Leave a Reply

Thanks, your message is sent successfully. We will contact you shortly!