Gradle:一个更好的构建工具

----------------------------------------------------------------------------------------------------------------------

原文标题:Gradle – A better way to build
原文网址:http://techblog.chegg.com/2011/04/29/gradle-a-better-way-to-build/
原文作者:Eric Berry @ Chegg‘s Engineering team
原文日期:2011年4月29日

译文标题:Gradle:一个更好的构建工具
译文网址:http://blog.csdn.net/yapingxin/article/details/36643877
译文作者:辛亚平 @ Honeywell Aerospace
译文日期:2014年7月3日

----------------------------------------------------------------------------------------------------------------------


我是Eric Berry,一名来自帕萨迪纳市Chegg(以前叫做Cramster)工程团队的资深软件工程师。在这篇文章中,我打算分享一下最近我们关于构建系统的决定的简明摘要。最近我们启动了一个新的Java开发项目,正在评估不同的可用的构建系统。我们的C#开发项目所采用的MSBuild显然不适用。由于对Maven和Ant有非常多的使用经验并熟知它们的优缺点,因此我推荐了一个构建系统阵营中的新丁:Gradle。

Gradle是什么?


Gradle是用Groovy编写的一个相对比较新的构建系统。如果你不熟悉Groovy,简单来说,它是基于Java虚拟机(JVM)的一种顶级的动态编程语言,相对于Java编程语言来说,提供了许多编程捷径,能够被用来很轻松地实现DSL(Domain Specific Languages,特定领域编程语言)。Gradle受益于Groovy的伟大优点,这意味着你的构建文件能够变得非常简洁易读。

依赖管理


开发者推崇Maven的最大的一个原因,就是依赖管理。下面这个例子就是一个最基本的带有一个单一的对JUnit的依赖的Java程序的Maven POM文件看上去的样子:

    4.0.0
    com.mycompany.app
    my-app
    jar
    1.0-SNAPSHOT
    
        
            junit
            junit
            3.8.1
            test
        
    

等效的Gradle构建脚本:
apply plugin: "java"
group = "com.mycompany.app"
archivesBaseName = "my-app"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

dependencies {
    testCompile "junit:junit:3.8.1"
}

Maven和Gradle配置文件之间的差异,并不在于行数上的区别(Maven用了17行而Gradle用了10行),这个不是强制性的。在你看来,哪一个更具有可读性?随着工程的增长和相关依赖的增加,Gradle为你提供的更好的可读性将开始显现。

构建任务


Gradle和Ant一样处理构建任务。在Ant中,也许你会写出下面这样的一个简单任务:


    
        Hello World
    

Gradle的任务同样简单:
task hello << {
    println "Hello World"
}

这二者之间再次体现出巨大的差异。在我看来,避免“括号负担(bracket-tax)”的的确确使代码更清晰更易读。

灵活性


也许你们中的有些人会问:“为什么我不继续用Ant?我能用Ant做任何事情,并且配合着Ivy,能够进行依赖管理。”是的,你是对的。

然而,Gradle也使用Ivy来管理依赖,所以你能够获得Ivy的强大和灵活的好处,除了一个局限,就是这些都包含在一个独立的构建文件里面,没有额外的 ivy.xml 或者 ivysettings.xml 文件。

Ant的确是非常灵活。我很难找到一个Ant不能支持的解决方案,除了一个例外:条件。Gradle构建脚本是用Groovy写的,毫不夸张地说,它就是代码。这意味着你的任务能够做的事情比Ant更多,只要你能写得出来,Gradle就能执行它。
task time << {
    int hours = new Date().hours
    switch (hours) {
        case 0..11:
            println "Good Morning! It’s ${hours}am."
            break

        case 12..17: // noon to 5pm
            println " Good Afternoon! It’s ${hours > 12 ? hours – 12 : hours}pm."
            break

        default: // 6pm to 11pm

            println "Good Evening! It’s ${hours – 12}pm. Shouldn’t you be going home?"
    }
}

扩展性


正如你所看到的,Gradle的DSL(特定领域编程语言)和对Groovy的应用使得它能够做任何事情。这同时也使得Gradle自身具有很强的可扩展性。创建你自己的任务非常容易,而且,当你想要让你的合作开发者使用你的任务的时候,创建你自己的Gradle插件也将非常容易,这意味着有人也许已经写了你需要的插件了。

社区


Gradle在Java和Groovy社区中迅速地变得非常流行,并且已经有了一些重量级的推手,包括Hibernate和Grails。除了强大的Gradle社区,还有Gradleware Inc.公司为我们带来Gradle和专业的支持。

结论


由于Gradle未我们带来的简洁、灵活性和扩展性,我们能够非常快速地配置和构建我们的项目,这意味着在构建系统上花费更少的时间,在写代码上投入更多的时间。我们非常高兴我们的决定,并且希望基于本文和其他人的实践,是你能够在你的构建需求中使用Gradle。构建快乐(Happy building)!

你可能感兴趣的:(ALM,Application,Lifecycle,Management)