Gradle作为一款基于Groovy语言的构建工具,已经吸引众多的ant,maven使用者转投gradle的怀抱,和Gradle相比,ant显得冗余复杂,maven显得有些死板落后,而gradle基于DSL语法,特点明显:简洁、灵活、可读性强。

Gradle和maven有很多相似点,gradle充分考虑到maven库的价值,在jar包管理上完全支持maven Repository,很多属性乍眼一看就能反应过来maven中对应的是什么标签,大大降低maven到gradle的迁移难度,并在构建方面改善了很多maven的不足,,同时,gradle对比maven更好的面向ant用户,使用maven时,虽然能通过plugin来跑ant的命令,但是maven在任务实现主要靠的是插件以及自身的固定框架,Gradle在定义任务方面思想与ant非常相似,做了很好的集成。下面会主要介绍gradle在配置方面与maven的异同处,以及Gradle比较实用的命令。

1.基础配置信息

maven使用.pom文件,基于XML,gradle使用.gradle文件,基于Groovy,gradle去掉maven中需要固定配置的groupId,artfactId,package等基本参数,通过 apply plugin: 'java',apply plugin: 'war'来表示打包方式,也提供sourceCompatibility,version等一些实用的标签。

2.依赖管理

Gradle的jar包管理支持maven下Repository方式,也支持Ant的Ivy方式,由于maven的Repository已经非常成熟,gradle在兼容Repository做得非常方便,定义maven的repository:

mavenLocal() :maven 本地库

mavenCentral() : maven 远程库

mavenRepo urls: 自定义库路径

maven通过groupId、name和version到配置的Repository里寻找指定依赖中的Jar包。Gradle的生命周期更为复杂,但也支持Maven依赖中的构建生命周期,compile、runtime、testCompile和testRuntime分别对应项目不同阶段的依赖。 并且还简化maven的配置命令。

Maven:

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.7</version>

<scope>test</scope>

</dependency>

Gradle:

dependencies {    testCompile group:'junit', name: 'junit', version '4.11'}

或者

dependencies {    testCompile 'junit:junit:4.11'    }

如果需要引用自己lib目录下jar包,maven需要在每个依赖加上<scope> 和<systemPath>标签或者在plugin里单独增加编译路径。而Gradle只需要加上

compile fileTree(dir: 'libs', include: '*.jar'),在多个路径下时:

jarTree = fileTree(dir: 'libs', include: '*.jar')

rootTree = new File(rootProject.rootDir, 'libs').getAbsolutePath()

jarTree += fileTree(dir: rootTree, include: '*.jar')

compile jarTree

在依赖相关的命令行方面,gradle与maven比较相似,maven常用的分析依赖命令包括:

mvn dependency:analyz查看依赖;

mvn dependency:tree 查看项目直接和传递依赖;

mvn help:effective-pom查看有效的pom;

在gradle中使用gradle dependencies 可以查看项目中包的依赖关系。加上-configuration来查看指定阶段的依赖情况,还可以-dependency来查看指定jar的依赖情况。

3.多项目管理

实际使用中,往往需要管理的都不是单单一个项目,maven使用依赖,继承,组成的概念,在父模块指定自己的子模块,并且准备一些各个子模块公用的资源,如插件,配置信息等等。将打包的模块与实现具体功能的模块分开的做法来管理多个项目。Gradle在这一方面做得更加清楚,划分更明确,学习gradle的多项目管理也很容易,在eclipse中安装完gradle插件之后,新建一个Gradle工程,选择flat-java-multiproject,生成的工程就是多项目管理一个示例。

Gradle通过settings.gradle文件来指定工程的子项目,在构建的初始化阶段(Initialization),Gradle会根据settings.gradle 文件来判断有哪些子项目被include到了构建中,并为每一个子项目初始化一个Project对象,在构建脚本中通过project(‘:sub-project-name’)来引用子项目对应的Project对象。关于多项目配置有非常多,因此就简述一下常用的配置共享以及配置独享。

Allprojects属性,返回该Project对象以及其所有子项目。

subprojects属性,返回该Project所有子项目。

project(‘:sub-project-name’)来设置对应的子项目的配置。

configure(subprojects.findAll {it.name.contains('XXX')})来找符合要求的子项目。

在子项目的build.gradle文件里添加自己独有的配置。

4.任务机制

Maven相对于ant相比仅仅通过plugin提供任务机制,相比而言自由度小而且很难扩展,每定义一个功能都需要写一个插件,Ant中使用tagret标签的echo来指定命令,gradle使用groovy语言,自带task概念,与ant使用的build文件更加接近。一个Task表示一个逻辑上的执行单元。

Gradle编写task的方式有很多,网上也能很容易搜索到相关的例子,在此简述有关task的一些实用命令以及自己一个常用的task:

Task listJars(description: 'Display compile jars.') << {

configurations.compile.each { File file -> println file.name }

}

这个task可以显示出当前项目下所有用于 compile 的 jar。

常用命令:

1. Task可以通过全名调用、前缀调用或首字母调用。

2. gradle XXX -s/  gradle XXX -S

当执行task有错误时,可以使用-s来查询详细的错误堆栈,-S输出全部堆栈信息。

3. -continue

比如执行gradle clean install -continue,即使遇到某些task失败也不会停止后续task的执行,一次性得到所有的构建错误。

4. Gradle tasks /  Gradle tasks all

显示出当前目录下所有的task以及显示出task之间的依赖关系。

最后,Gradle不足的地方就在于使用了groovy语言,熟悉一个新语言是需要学习成本的,而ant和maven都是使用xml来实现,不过groovy被称为是没有类型的java,对于java学习者来说还是容易接受的,这样提高了gradle在实际应用中的可行性。作为一个构建工具,Gradle能算得上非常好的选择。对于Gradle的一些简单介绍,希望能对大家有所帮助。

maven到Gradle,一些对比和分享的更多相关文章

  1. maven与gradle的对比

    Java世界中主要有三大构建工具:Ant.Maven和Gradle.经过几年的发展,Ant几乎销声匿迹.Maven也日薄西山,而Gradle的发展则如日中天.笔者有幸见证了Maven的没落和Gradl ...

  2. Maven和Gradle对比

    Java世界中主要有三大构建工具:Ant.Maven和Gradle.经过几年的发展,Ant几乎销声匿迹.Maven也日薄西山,而Gradle的发展则如日中天.笔者有幸见证了Maven的没落和Gradl ...

  3. 项目自动构建工具对比(Maven、Gradle、Ant)

    Java世界中主要有三大构建工具:Ant.Maven和Gradle.经过几年的发展,Ant几乎销声匿迹.Maven也日薄西山,而Gradle的发展则如日中天. Maven的主要功能主要分为5点,分别是 ...

  4. Maven和Gradle对比(转载)

    转载出处:http://www.cnblogs.com/huang0925 Java世界中主要有三大构建工具:Ant.Maven和Gradle.经过几年的发展,Ant几乎销声匿迹.Maven也日薄西山 ...

  5. Maven、gradle、Ant、Eclipse IDE

    Maven.gradle.Ant.Eclipse IDE之间的关系 http://wenku.baidu.com/view/d33208810912a21615792910.html?from=sea ...

  6. Maven和Gradle

    Maven和Gradle对比 Java世界中主要有三大构建工具:Ant.Maven和Gradle.经过几年的发展,Ant几乎销声匿迹.Maven也日薄西山,而Gradle的发展则如日中天.笔者有幸见证 ...

  7. 如何在Maven和Gradle中配置使用Groovy 2.4与Spock 1.0

    如何在Maven和Gradle中配置使用Groovy 2.4与Spock 1.0 原文 https://dzone.com/articles/spock-10-groovy-24 翻译 hxfiref ...

  8. Java构建工具:如何用Maven,Gradle和Ant+Ivy进行依赖管理

    原文来自:https://zeroturnaround.com/rebellabs/java-build-tools-how-dependency-management-works-with-mave ...

  9. Zxing 的集成 ---- Maven 对应 Gradle 的写法

    Zxing 的集成 ---- Maven 对应 Gradle 的写法 刚刚想耍耍二维码,想到了zxing和zbar,又想到zxing是Google老爹的,想想就算了吧,虽然zbar快但是识别错误率也高 ...

随机推荐

  1. Android的JSON数据解析

    一. 使用原生方式解析 准备工作:准备一个布局文件,用来显示元数据与转换之后的数据 <?xml version="1.0" encoding="utf-8" ...

  2. 安装redis报错 you need tcl 8.5 or newer in order to run redis test

    解决方法: wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz tar -zxvf tcl8.6.1-src.tar.gz -C ...

  3. centos 7 rabbitmq 3.7.12 erlang 20.3源码安装

    1.下载erlang 官网地址 http://www.erlang.org/download 挑选合适的版本 然后 建议20.3运行命令 wget http://erlang.org/download ...

  4. 分布式事务、多数据源、分库分表中间件之spring boot基于Atomikos+XADataSource分布式事务配置(100%纯动态)

    本文描述spring boot基于Atomikos+DruidXADataSource分布式事务配置(100%纯动态),也就是增加.减少数据源只需要修改application.properties文件 ...

  5. Java基础学习-三元运算符和键盘录入的基本步骤和使用

    1.三元运算符的执行流程   package com.denniscui_05; /*  * 三元运算符:  *         关系表达式?表达式1:表达式2  *  * 执行流程:  *      ...

  6. 20175312 2018-2019-2 《Java程序设计》第9周学习总结

    20175312 2018-2019-2 <Java程序设计>第9周学习总结 教材学习内容总结 已依照蓝墨云班课的要求完成了第九章的学习,主要的学习渠道是PPT,和书的课后习题. 总结如下 ...

  7. React.js小书总结

    (迁移自旧博客2017 08 27) 第一阶段 react的组件相当于MVC里面的View. react.js 将帮助我们将界面分成了各个独立的小块,每一个块就是组件,这些组件之间可以组合.嵌套,就成 ...

  8. PTA编程总结2—币值转换

    7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成"贰万叁仟壹百零捌"元.为了简 ...

  9. 比原链(Bytom)先知节点 Windows接入文档

    系统要求 我们建议选择知名的VPS服务商,运行比原链节点对算力没有要求,但是请配置尽可能大的磁盘空间. 节点服务器最小配置: 操作系统: Windows/Linux/Docker CPU: 2核 内存 ...

  10. 大数据: 完全分布式Hadoop集群-HBase安装

            HBase 是一个开源的非关系(NoSQL)的可伸缩性分布式数据库.它是面向列的,并适合于存储超大型松散数据.HBase适合于实时,随机对Big数据进行读写操作的业务环境.   本文基 ...