Gradle真能干掉Maven?今天体验了一把,贼爽!
共 7797字,需浏览 16分钟
· 2021-04-06
作为Java Web开发,很多朋友都在使用Maven作为构建工具。Gradle作为Google大力拥护的构建工具,被广泛地运用到了Android开发中,在Java Web方面也大有取代Maven上位的趋势。Gradle真的有那么香么?今天我们来体验一把,以我的脚手架项目
mall-tiny
为例,看看Gradle到底行不行!
Gradle简介
Gradle是一款开源的自动化构建工具,使用灵活且性能极佳,可以使用 Groovy 或者 Kotlin DSL 来编写构建脚本。从移动开发到微服务,从小团队到大企业,Gradle提高了开发人员的生产力。
Gradle具有如下特性:
可以高度定制:Gradle使用可定制、可扩展的方式进行建模,非常灵活。 构建速度快:Gradle通过重用先前执行的输出,仅处理已更改的输入且通过并行执行任务来快速完成构建。 功能强大:Gradle是Android的官方构建工具,并支持许多流行的语言和技术。
Gradle使用体验
接下来将把我的脚手架项目
mall-tiny
从使用Maven改造成使用Gradle,来体验一把Gradle的使用。
创建Gradle项目
首先需要下载Gradle的安装包,建议下载带源码的完整版本(否则Gradle中属性点进去不会有注释)下载地址:https://gradle.org/releases/
![](https://filescdn.proginn.com/79aa43fb84f2b1b320904d3ee14765b7/21fd216b393363a0dc7604c220f07420.webp)
下载完成后进行解压,之后在IDEA中创建一个SpringBoot项目;
![](https://filescdn.proginn.com/047ab2acc097d469aba2393a273032b2/908b947ee7b25dd08d9065602574cba1.webp)
选择创建一个Gradle项目;
![](https://filescdn.proginn.com/b34acc6da6254f1107b00e4a757c6d15/4845f7b7a46b04b8404a3366ee1fd48c.webp)
之后选择使用我们之前下载好的Gradle版本,输入你解压的目录;
![](https://filescdn.proginn.com/e86ee3f0a5651510a29882a1d929bd03/b66ac3a6c9bdb0464ad3c4c5426af065.webp)
项目创建完成后,一个非常简单的Gradle项目目录结构如下,需要注意的是 build.gradle
和settings.gradle
这两个文件。
![](https://filescdn.proginn.com/06b7327acb2daeecb15a52edacfa8c9c/56911eafe8adce906ce35899c6a28a12.webp)
Gradle插件介绍
在新创建的build.gradle
文件中,我们可以发现下面3个插件:
plugins {
id 'org.springframework.boot' version '2.3.0.RELEASE'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
org.springframework.boot
SpringBoot官方提供的Gradle插件,方便我们使用SpringBoot,通过修改version
可以控制使用的SpringBoot版本。
io.spring.dependency-management
一个可以提供依赖版本管理功能的Gradle插件(类似于Maven)。
比如之前我们使用Maven管理Druid版本时,会先在<dependencyManagement>
中定义好依赖的版本。
<dependencyManagement>
<dependencies>
<!--集成druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
</dependencies>
</dependencyManagement>
然后在引入依赖的时候就无需再填写版本号了,这样做的好处就是可以统一依赖的版本。
<dependencies>
<!--集成druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
</dependencies>
在Gradle中你可以这样用,是不是简洁不少!
dependencies {
implementation 'com.alibaba:druid-spring-boot-starter'
}
dependencyManagement {
dependencies {
dependency 'com.alibaba:druid-spring-boot-starter:1.1.10'
}
}
java
Java插件将Java编译、测试等常用功能添加到项目中,它是许多其他JVM语言Gradle插件的基础。
Maven转Gradle
Maven项目转Gradle非常简单,只需要把
pom.xml
中的依赖转为build.gradle
中的依赖即可。
比如说Hutool这个依赖,Maven中的写法是这样的:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.5.7</version>
</dependency>
Gradle中的写法是这样的,一行即可搞定:
dependencies {
implementation 'cn.hutool:hutool-all:4.5.7'
}
有时候Gradle下载依赖比较慢,这里将url修改为阿里云的Maven仓库地址可以加速;
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
mavenCentral()
}
再来个完整的 build.gradle
,已经添加所有依赖;
plugins {
id 'org.springframework.boot' version '2.3.0.RELEASE'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.macro.mall.tiny'
version = '1.0.0-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-aop'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-configuration-processor'
implementation 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
implementation 'com.alibaba:druid-spring-boot-starter'
implementation 'mysql:mysql-connector-java'
implementation 'io.springfox:springfox-swagger2'
implementation 'io.springfox:springfox-swagger-ui'
implementation 'io.swagger:swagger-models'
implementation 'io.swagger:swagger-annotations'
implementation 'cn.hutool:hutool-all'
implementation 'io.jsonwebtoken:jjwt'
implementation 'com.baomidou:mybatis-plus-boot-starter'
implementation 'com.baomidou:mybatis-plus-generator'
implementation 'org.apache.velocity:velocity-engine-core'
}
dependencyManagement {
dependencies {
dependency 'com.alibaba:druid-spring-boot-starter:1.1.10'
dependency 'mysql:mysql-connector-java:8.0.16'
dependency 'io.springfox:springfox-swagger2:2.9.2'
dependency 'io.springfox:springfox-swagger-ui:2.9.2'
dependency 'io.swagger:swagger-models:1.6.0'
dependency 'io.swagger:swagger-annotations:1.6.0'
dependency 'cn.hutool:hutool-all:4.5.7'
dependency 'io.jsonwebtoken:jjwt:0.9.0'
dependency 'com.baomidou:mybatis-plus-boot-starter:3.3.2'
dependency 'com.baomidou:mybatis-plus-generator:3.3.2'
dependency 'org.apache.velocity:velocity-engine-core:2.2'
}
}
test {
useJUnitPlatform()
}
最后你需要做的就是把原来的代码都复制过来就行了,至此Gradle改造完成。
![](https://filescdn.proginn.com/22b905cf8fc02baaa51f97051cb19b9e/c38ff45af0a25946b71ba98e3fe420e0.webp)
对比Maven
都说Gradle构建速度快,官方自己也在说,我们将项目clean以后构建下试试,看看到底有多快!
首先使用之前的Maven项目,直接clean之后再package,打包构建下;
![](https://filescdn.proginn.com/6de6811afbca750b0b1810871365cd5a/a199de8f548ea1bbed162465f1a6e74e.webp)
控制台输出如下,耗时 32s
;
![](https://filescdn.proginn.com/b794681227c0f14f4e58977aa2487baa/a7de427085d9d8ea0a814d3228de8b00.webp)
再使用现在的Gradle项目,也是clean之后再package(Gradle中使用bootjar命令),打包构建下;
![](https://filescdn.proginn.com/ba3cf416be4c9e8bf2abdda512423f81/c50754ebe4921d04ec10495989697b0c.webp)
控制台输出如下,耗时 15s
,快了不止一倍!
![](https://filescdn.proginn.com/a20c5f24c9ee22a7e79d76a147502cdd/314493efd3bac370444550ac3a6917bd.webp)
再放张官方的对比图,Gradle构建比Maven快1倍,那是妥妥的!
![](https://filescdn.proginn.com/d662186627f4929e06d0566537211982/6b5259bdfa2f52134d7804485068bbd6.webp)
总结
Gradle作为Google官方推荐的构建工具,确实很不错!如果你会写Groovy脚本的话,使用起来是非常灵活的,而且语法简洁,构建速度也很快!
参考资料
Gradle官方文档:https://docs.gradle.org
项目源码地址
https://github.com/macrozheng/mall-tiny/tree/gradle
![音符](https://filescdn.proginn.com/4319671584b5a4797a859a7e7babd5e4/2d0069c3f6cc3f5d90622f6e255354a3.webp)
往 期 推 荐 1、网曝IDEA2020.3.2,自动注释类和方法注释模板配置
2、牛逼!IntelliJ IDEA居然支持视频聊天了~速来尝鲜!快来冲一波
4、知名国产网盘翻车?清空免费用户文件后,又开始清理付费用户资源
1、网曝IDEA2020.3.2,自动注释类和方法注释模板配置
2、牛逼!IntelliJ IDEA居然支持视频聊天了~速来尝鲜!快来冲一波
4、知名国产网盘翻车?清空免费用户文件后,又开始清理付费用户资源
![](https://filescdn.proginn.com/f794e4373c5e7353ec92110b2f02669f/93ea928a0201577a7c9f87b2dda47ce1.webp)
点分享
![](https://filescdn.proginn.com/85b7ac715866d9b6589bf4f2edcb6f96/6cbfff02b33dcbdc299cd0caf4fe5340.webp)
点收藏
![](https://filescdn.proginn.com/4f1f137d7012d3b55986157339474bbe/16e8d9e32d36a45283796158bf778d4d.webp)
点点赞
![](https://filescdn.proginn.com/4934831297029c728938726c2614e199/7882e34d9601efd0f830e02de4011777.webp)
点在看