Gradle
过去
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官网。
Gradle的build scan很吸引人,其中详细展示了build过程分析报告。以前的maven构建完全是黑盒,就提供了一些日志显示成功和错误。Gradle的task支持我们去影响task的过程甚至是自定义build。
项目中在gradle build之后都会生成测试报告,完全自动的生成报表html。
吸引我的几点
- 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.