gradle比maven强大太多了

Owen Jia 2018年11月28日 104次浏览

Gradle

logo

过去

Maven作为java体系jar管理这块的地位不用质疑的,基本上每个公司都有Maven私服nexus,公司内部的jar都发布在这个平台上面共其他团队使用。

项目构建这块也依赖Maven的命令,如:deploy package clean。同时maven的插件体系也很完善,默认插件:maven-deploy-plugin等。配置文件pom.xml也能比较灵活的进行定制化,其他产品对maven的支持也很强力,如springboot等。

就目前状况来看,继续使用Maven也挺不错的不需要有所改变,大家都已经很熟悉了。

但是越来越多的平台支持Gradle必有其特别之处。SpringBoot的官网中也可以看到支持Maven和Gradle两种方式,和朋友的交流中也发现不少公司项目采用Gradle方案来构建。早在这篇文章前差不多2年吧,就已经接触到Gradle也了解了一些但并没有实际使用。

如今

如今决定完整的掌握Gradle使用并在项目中逐步使用它,不单单是新的技术总是会吸引我让我恋恋不忘,同时也是发现Gradle的体系远大于Maven家族、灵活性远强于Maven、构建速度也远比Maven快不止一点就像它官网介绍一般(maven VS gradle)。

Gradle官方称: Gradle is up to 100 times faster than Maven

我们看下面三幅图,说明Gradle如何比Maven快了,该图片来源于Gradle官网。

lib-jar medium-multi-project multi-project

Gradle的build scan很吸引人,其中详细展示了build过程分析报告。以前的maven构建完全是黑盒,就提供了一些日志显示成功和错误。Gradle的task支持我们去影响task的过程甚至是自定义build。

scan-report

项目中在gradle build之后都会生成测试报告,完全自动的生成报表html。

catalog content

吸引我的几点

  • build scan提供jar托管服务scans.gradle.com是免费的,作为个人开发者也可以很轻松提交jar而不需要安装nexus服务。
  • building 支持自定义开发,和webpack\grunt\gulp等很像可以灵活使用,这点Maven真的不行很僵化。
  • Gradle支持的tasks和插件丰富远不是maven可以比,task的理念就比Maven强很多。比如Task: properties 列出可用的变量真心方便。
  • Groovy和Scala的支持比pom.xml可读性强很多也很简洁,性能上自不用说。
  • 提供gradlew命令和gradle-wrapper集成到项目内进行构建,保证项目级别的独立性不需要单独安装gradle。
  • Gradle可以很好的过度Maven和nexus服务,对于保守型公司这个真的很重要。
  • 有gradle init --type java-library这样的命令可以很快速的创建初始项目环境,不需要手动去搭建。

测试样例分解

以gradle-test项目为例进行讲解:

项目目录结构

1、settings.gradle是项目的唯一引用,父子项目会有多行而一般就一个项目名。

rootProject.name = 'gradle-test'
include 'gradle-test-java'
include 'gradle-test-dubbo-api'
include 'gradle-test-webapp'
include 'gradle-test-jpa'
include 'gradle-test-bootapp'

2、build.gradle这个文件和Maven的pom.xml是一个级别意思,详细的配置都写在这里。

plugins {
    id 'war'
    id 'org.gretty' version '2.2.0'
}

group 'com.ts'
description '传统方式构建web项目运行在tomcat中,构建war包,如:gradle war'

sourceCompatibility = 1.8

dependencies {
    providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
    compile 'com.ts:gradle-test-dubbo-api:0.0.2'

    testCompile group: 'junit', name: 'junit', version: '4.12'
    testCompile 'org.mockito:mockito-core:2.15.0'
}

//这里可以自定义jar的manifest文件
war {
    manifest {
        attributes('Implementation-Title': project.name,
                'Implementation-Version': project.version,
                "Author":"Owen Jia")
    }
}

project(":gradle-test-webapp"){
    dependencies{
        implementation project(":gradle-test-jpa")
    }
}

3、Gradle的Porject构建配置和maven一样简单好用,通过idea使用一目了然各种tasks。

4、Gradle Plugins Portal和Gradle Scan是分开的,有平台可以统一管理和搜索和grunt的插件库中心很像。

插件网址:plugins.gradle.org

特别提醒

  • 1、相对于Maven来说Gradle要复杂很多,不敢说一定会替代Maven但Gradle的比重会越来越多,有这么一种趋势。
  • 2、“gradle-test”项目是详细的测试用例,基本全涵盖了项目构建中用到的方方面面,推荐你直接下载学习或在此基础上搭建项目。
  • 3、推荐多看看官网,Gradle的文档很丰富全面,称得上良心文档也看的出Gradle公司推广使用上下了一般功夫。

友链

Gradle官网:https://gradle.org/guides/

样例项目gradle-test托管github上:https://github.com/owen-jia/gradle-test

作者:Owen Jia, 推荐关注他的博客:Owen Blog.