Gradle入门教程【原创】

目录
[隐藏]



前言:

    什么是gradle,为什么要用gradle,最确切的回答当然来自官方网站:

    Gradle:从命令行到IDE,再到持续集成,只需要一套企业级的自动化构建系统来管理他们。声明并且执行所有任务,实现编译,测试,打包等功能,并且支持多语言,多平台,多框架软件以及服务支持或者手机应用。

    From command line to IDE to continuous integration, only one Enterprise build automation system to rule them all. Declare and execute all tasks necessary to compile, test, package and ship multi-language multi-platform multi-project and multi-channel software, SaaS and Mobile Apps.

一、构建

    我们的项目在完成编码之后,需要编译,测试打包,然后上线运行,甚至有些过程是同时交叉进行的。此外,我们的项目还经常需要用到各种依赖(jar包),如第三方提供的库。随着工程越来越庞大,依赖间的关系变了越来越复杂。我们很多的工作花在了搭建环境,编译,测试,部署,打包,运行等繁杂的任务中(这些过程统称“构建”),而程序员真正关心的只是编写代码,实现功能。

    如果这些工作需要我们亲力亲为,就要消耗太高的成本。我们希望能有人帮我们一口气搞定。于是乎,软件世界里出现了Ant,Maven以及本文将要介绍的Gradle等构建工具。这些工具的作用就是帮我们自动清理、编译、执行测试、生成测试报告、打包和部署。当然,这些构建工具的作用远不止这些,他们甚至可以管理起开发周期的整个过程。

二、Ant、Maven和Gradle

    最早比较有名的构建工具叫Make。它使用名为Makefile的脚本文件作为执行标准。它能利用系统的命令完成构建任务,但缺点是死板,不灵活等。
    之后出现了Ant(Another Neat Tool)。出现的原因就是因为作者受不了Makefile严格的语法要求。Ant使用xml文件编写配置脚本。语法更加友好灵活。
    Make和Ant都是过程式的,都没有对项目依赖关系的管理。而Maven则内置了依赖管理,使得用户终于解放了双手,不需要再为复杂的依赖关系而头疼了(当然不是完全不管了)。那么 ,有了Maven为什么又会出现Gradle?当然是因为我们依然不满意:XML的繁冗,不够灵活,学习曲线陡峭等等。Gradle用groovy来做为build脚本,比xml要易读易用得多(可以先不用关心什么是groovy
    maven可以帮助管理依赖关系,但是要在maven里实现一个简单的自定义功能,就很麻烦,要写maven插件,而在gradle里,实现一个自定义功能我们称之为task(任务),它可以轻易的添加自己的功能。maven的依赖管理很死板,只能依赖于标准的maven artifact,不能依赖本地的某个jar文件或者其它的源码。而gradle则可以混合地同时支持这些依赖方法。

    总的来说gradle继承、简化并拓展了Maven。

    如果你需要更好的理由,请参见:http://gradle.org/docs/current/userguide/overview.html#sec:why_groovy《2.2. Why Groovy?》

三、安装配置

    Gradle并不需要传统意义的安装过程。只需要下载压缩包解压就可以使用了。当然,为了每次使用的方便,我们可以配置一下环境变量。
    如果使用类似Intellj的来开发项目,在新建Gradle项目的过程中,会有选择配置本地Gradle的选项。
    1.下载Gradle压缩包,下载地址:   http://gradle.org/downloads/

9c887df8-4b2a-4249-9c0e-3007f58a58ea

    2.下载解压后,放到某个目录下:

78b381d9-0e54-4e40-9dc2-3c9f369adc88

    3.配置环境变量

    释疑:【环境变量PATH】环境变量的作用是指定命令搜索路径。在执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。例如我们配置jdk的环境变量,把 jdk安装目录下的bin目录添加到PATH变量中。bin目录中包含经常要用到的可执行文件如javac等,设置好 PATH变量后,就可以在任何目录下执行使用javac等工具了。

    如果配置了Gradle的环境变量,我们在命令行里就可以直接执行Gradle命令。如果不配置,执行命令时,则需要写上完整的程序文件的路径,很不方便。

f02f5dee-3c73-464b-a967-53e3dc89f6c5

    配置完成后,测试是否成功:新打开cmd,输入gradle -v,显示类似如下内容,则安装配置成功。
    如果配置无误,但没有显示如下内容,可以尝试注销一下系统再尝试。

41d4c79b-e686-4f4d-b1e0-6ab9ba35e684

四、使用入门

    Gradle需要一个配置文件,默认名为build.gradle。在项目根目录下新建build.gradle文件。
    正如大多数java项目的开发过程都是先编译源代码,跑单元测试,打包成jar文件。Gradle通过利用插件来实现这些功能。插件配置拓展Gradle,还可以通过添加task(任务),实现更多功能。

    在Gradle中,有两个基本概念:项目任务

    项目是指我们的构建产物(比如Jar包)或实施产物(将应用程序部署到生产环境)。一个项目包含一个或多个任务。
    任务是指不可分的最小工作单元,执行构建工作(比如编译项目或执行测试)。

    那么,这些概念和Gradle的构建又有什么联系呢?每一次Gradle的构建都包含一个或多个项目

    下面这张图展示了上面所谈到的这些概念的关系。

63918611gw1ehqthjdvaoj20eb09v3yv[1]

    Gradle一般使用以下配置文件对Gradle的构建进行配置:

    build.gradle:构建脚本指定了一个项目和它的任务。
    gradle.properties:属性文件用来配置构建属性。
    gradle.settings:设置文件对于只有一个项目的构建而言是可选的,如果我们的构建中包含多于一个项目,那么它就是必须的,因为它描述了哪一个项目参与构建。每一个多项目的构建都必须在项目结构的根目录中加入一个设置文件。

    参考来源: <http://blog.jobbole.com/71999/>


 1. Java插件

    例如,如果想让Gradle自动编译测试打包java代码,可以使用java插件:
    在build.gradle里面添加一行:
apply plugin: 'java'
    添加插件后,gradle会自动默认在/src/main/java目录下寻找源代码,在/src/test/java目录下寻找单元测试的代码。需要打包时,在src/main/resources目录下的资源文件也会被包含在jar文件里。src/test/resources里的文件会包含在测试代码的路径下。所有输出的文件,会放在build目录下。

    【补充】Gradle给了用户足够的自由去定义自己的任务,不过同时Gradle也提供了类似Maven的“约定优于配置”方式,这是通过Gradle的 Java Plugin实现的,从文档上看,Gradle是推荐这种方式的。Java Plugin定义了与Maven完全一致的项目布局:

    src/main/java
    src/main/resources
    src/test/java
    src/test/resources

    区别在于,使用Groovy自定义项目布局更加的方便:

sourceSets {
    main {
        java {
            srcDir 'src/java'
        }
        resources {
            srcDir 'src/resources'
        }
    }
}

2.task(任务)

    Java插件还包含了一些task用来构建项目。最常用的task就是“build task”。当运行“gradle build”命令时,会自动编译代码,创建包含了编译的类文件和资源的jar文件。

运行过程如下:
> gradle build
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build
BUILD SUCCESSFUL
Total time: 1 secs

    还有一些常用task有:
    clean:删除build目录和其包含的所有文件
    assemble:编译打包代码,但不运行单元测试。
    check:编译并进行单元测试。
    官方文档中,你可以获取更详细的介绍:

    《Chapter 6. Build Script Basics》http://gradle.org/docs/current/userguide/tutorial_using_tasks.html

3. 依赖

    Java项目往往需要依赖外部jar包。
    和maven一样,我们需要一个中央库来获取我们的依赖文件。我们可以使用maven的中央库,在build.gradle中添加:
repositories {
    mavenCentral()
}

下面,我们添加一些依赖,例如添加commons-collections和测试时需要用到的jnuit的依赖。在build.gradle中添加:

dependencies {
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

让它依赖于spring,也很简单:

apply plugin: 'java'
dependencies {
    compile 'org.springframework:spring-context:3.0.4.RELEASE'
}

gradle便会自动地到maven服务器下载spring-context-3.0.4.RELEASE.jar,以及它所依赖的jar包。

还可以直接依赖本地jar包,如:

apply plugin: 'java'
dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

    这样就可以直接依赖/libs/目录下所有的jar文件了。

五、总结

    以上提到的内容只是Gradle的冰山一角,但已经可以覆盖一个简单的完整项目,Gradle的官方文档给出了详尽的解释和案例:

    《Gradle User Guide》http://gradle.org/docs/current/userguide/userguide
    《Chapter 7. Java Quickstart》https://gradle.org/docs/current/userguide/tutorial_java_projects.html
    Groovy语法格式是基于Groovy的,如果只是会用Gradle,是不一定要学习Groovy的,但深入学习Gradle,就必须知道Groovy是什么了。这个根据个人需要自行选择。


分享到:

评论已关闭