Gradle还是maven?

895 阅读3分钟

这是我参与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 约定大于配置,以下是顶级的构建脚本声明块。

图片.png

dependencies 中的依赖关系:

  • implementation:它仅仅对当前的Module提供接口,使用 implementation 屏蔽了外部模块直接调用它声明的依赖

  • api:编译时与 implementation 相反,它允许外部模块不管在编译时还是运行时都可以调用 api 声明的依赖。和原来的 compile 很类似。

大部分情况下,默认使用 implementation,优势如下:

  • 速度快
  • 隐藏大部分实现细节