Gradle入门
1、Gradle特点及优势
Gradle并不是建议于构建标准之上的一系列选项,而是使用丰富的具有描述性的语言进行开发和扩展这些标准的工具。
Gradle的构建文件时Groovy而不是XML,原因是对于复杂的XML文件来说只适合机器去阅读而不适合人去阅读,还有XML只适合表示嵌套结构而不适用描述程序流。
Groovy是基于JVM的的动态语言,有很多方面类似于Java。每一个Gradle的构建文件实质上就是一个Groovy脚本。作为一个Gradle的初学者,你没有必要知道你在写Groovy代码,当你需要Gradle的高级功能时,深入了解Groovy显得更为重要。不同于Ant和Maven的构建文件,Gradle基于Groovy的构建文件允许你在配置文件中执行类似于编程任务的目的。这将缓解在Ant和Maven中缺乏控制流的问题。
面向领域的构建语言
每一个维护者复杂构建任务的开发者,在某种程度上想在构建文件中书写一块代码。有时候你需要一个迭代器,有时候你需要一个复杂的条件,但同时你又不想对整个文件作出大的改动。但是,给你无限的能力来更改复杂的构建是一件好的事情吗?它有可能给出很大的灵活性,但同时也给维护带来灾难。Gradle的构建文件时Groovy脚本,Gradle使得将选项分解为脚本成为可能,但是这样并不鼓励这么做。
实质上,Gradle并不是想主要通过Groovy而是想通过DSL来构建任务。Gradle用户可以学习这个语言,并不需要知道Groovy,就可以高效的使用Gradle。通过很习惯的DSL就可以构建软件,通常不需要针对性的编程。Gradle推荐用户使用DSL,其次是编程。
当DSL不能解决构建问题的时候,你可以通过插件的方式来扩展DSL。如果你来自Maven,那么Maven插件和Gradle插件有很大的出入。Maven插件通常通过严格的方式扩展工具在一个或多个特定的周期中的行为。在Gradle中,是通过引进一个或者多个任务,来增加构建行为的可配置性,实质上扩展DSL的一种方式:通过插件包含特定的领域。扩展Gradle DSL比在构建文件中书写代码更被推荐。
2、安装
下载zip压缩包,解压缩,将文件夹中的bin目录配置到环境变量中。
3、Hello World构建文件
创建文本文件build.gradle,内容为
task helloworld <<{
println 'hello,world'
}
执行
gradle -q helloWorld
输出结果
'hello,world'
以上这个构建文件没有请求任何事情,也没有任何外部的依赖。他没有做任何的事情除了输出一段消息。在构建java代码之前,再举一个例子。我们将使用两个任务和一个依赖。
task hello <<{
println 'hello'
}
task world(dependsOn:hello) <<{
println 'world'
}
再次执行
gradle -q world
输出结果
hello, world
4、构建Java程序
前面的Hello World程序没有说服力。下面我们看看用它来构建Java代码是多么的容易。为了简单起见,我们将使用一个简单的Java程序,展现一下:只要你遵从它的约定使用Gradle构建Java程序很简单。
HelloWorld.java
位于\src\main\java\org\gradle\example\simple目录下
内容为:
package org.gradle.example.simple;
public class HelloWorld {
public static void main(String args[]) {
System.out.println("hello, world");
}
}
build.gradle内容为
apply plugin:'java'
运行gradle build可生成build文件夹
在\build\classes\main\org\gradle\example\simple文件夹中存在
HelloWorld.class
执行java -cp build/classes/main/ org.gradle.example.simple.HelloWorld可得到
hello, world
5、Gradle命令行
在先前的例子中大多数都从命令行运行,这里面简要介绍Gradle的命令行参数:
-h
帮助
-Dproperty=value
从命令行传递参数
-i -d
设置日志级别
-m
评估构建文件,但不执行任何任务
-q
压制大多数输出,仅显示错误信息
--gui
启动Gradle GUI
-s
释放栈跟踪
6、参考书籍及样例
书籍Building.and.Testing.with.Gradle