这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战
Gradle作为maven的挑战者,在自己的官网上宣传了很多优势,其中最核心的是快,其次是配置简单。可能单单一个快字就能俘获一批用户,可正当我准备分享给组内的小伙伴时,leader对这个东西的评价似乎不太高。首先这里的编译更快并不是运行时更快,相对来说就那么“致命”;然后它用的还是maven的仓库,其人篱下就很难翻身;最后它的配置并没有声明的那么简单,相对xml并没有简单很多。但如果你就是个看xml不顺眼的人,也不妨一试。总体来说,提升是有的,但还不足以革命。引用leader的一句话:编译工具是螺旋上升发展的。
虽然用不上,但还是可以学习一下的。
为什么我们需要一个构建工具
什么是构建?针对 java 项目,构建的过程包括:
- 生成资源 (有时)
- 编译
- 编译测试资源
- 运行测试
- 打包:jar,war
- 运行相关检查,包括 checkstyle 等
- 生成报告
管理多文件项目时,我们需要的是约定优于配置。例如../src/main/java 存放 java 源文件 。编译打包自动化执行,节约时间,避免错误。
Gradle 是一种构建工具
Gradle的优势在哪呢?
-
高性能
Gradle 可以避免不必要的构建,因为可以利用上一次构建的结果,只重新构建改动的内容。通过 gradle wrapper,可以利用别的机器上的构建的结果。
-
基于 JVM
只要有 jvm 的地方都可以运行,保证了跨平台的特性。而且,gradle 不仅限于构建 Java 应用,支持 C/C++,JavaScript,Scala,Groovy,Kotlin
-
约定
继承了 maven 的良好设计,使用约定的配置,同时提供良好的扩展性
-
扩展性
-
洞察力
提供了大量的构建信息,方便快速定位性能问题
我们 maven 用的挺好的
-
gradle 是新技术吗?
不算是,早就在安卓界普及了。比较成熟
-
gradle 简洁
gradle 基于 groovy 语言,配置的行数比 xml 的 pom 少很多倍
-
gradle 快
针对同一个 java 项目,gradle 构建的时间比 maven 少很多倍
-
gradle 灵活
约定大于配置
-
gradle 可以直接使用 maven 仓库中的依赖
gradle 不是一个全新的东西,没有否定 maven。只是取其精华,去其糟粕
Gradle 重要概念
Gradle 有两个最重要的概念:project 和 task。一次构建可以有 1 到 n 个 project,每个 project 有 1 到 n 个 task。
构建脚本块
gradle 约定大于配置,以下是顶级的构建脚本声明块。
dependencies 中的依赖关系:
-
implementation:它仅仅对当前的
Module
提供接口,使用 implementation 屏蔽了外部模块直接调用它声明的依赖 -
api:编译时与 implementation 相反,它允许外部模块不管在编译时还是运行时都可以调用 api 声明的依赖。和原来的 compile 很类似。
大部分情况下,默认使用 implementation,优势如下:
- 速度快
- 隐藏大部分实现细节