在这个教程中,我们将注意力集中在Gradle的启动上。尽管Android Studio内置了Gradle,我们现在的目标是理解Gradle的安装,启动,执行基本的Gradle命令。
在我们开始前,如果你想知道为什么Gradle是构建工具很好的选择,我建议你阅读这篇文章article。尽管需要基础才能阅读它,这篇文章将开拓你的视野为什么开发者如此拥簇Gradle.
接下来几部分将会带你安装Gradle。Gradle需要java环境,我假设你是java开发者,已经安装了java sdk在你的机器上。
目前为止,Gradle最新版是2.2.1可以在这里获取。
下载zip文件到你机器上。你会发现它的文件名为gradle-2.2.2-all.zip。将它解压缩。
在我的机器上,我将它解压到e:\gradle-2.2.1,所以我将看到如下的子文件夹:
你可能会问为什么你需要单独安装Gradle。如果你已经安装了Android Studio你将会注意到这点。正如所知的,Android Studio内置了Gradle,没必要再次安装Gradle。
后面的教程中我们将会讨论Android Studio,使用它内置的Gradle。这章和接下来的几章我们会从我们自己安装的Gradle开始,运行命令行,近距离得接触它,以便理解他到底做了什么。后面,当Android Studio做这些事的时候,我们将更好的理解发生了什么。你就不会认为Android studio是在执行黑魔法。
现在,下载Gradle,启动它吧。
\bin文件夹包含了gradle批处理文件(unix和windows),你将用它运行命令。
做接下来几件事:
1.创建系统环境变量GRADLE_HOME将它指向Gradle安装文件夹,在我的机器上是e:\gradle-2.2.1,因此我创建了GRADLE_HOME并将它的值指定为e:\gradle-2.2.1。
2.添加%GRADLE_HOME%\bin到PATH环境变量中。这将允许你在任何文件夹启动gradle命令。
为了验证是否安装成功,打开终端,输入如下命令:
gradle -v
这将会显示gradle版本信息:
------------------------------------------------------------
Gradle 2.2.1
------------------------------------------------------------
Build time: 2014-11-24 09:45:35 UTC
Build number: none
Revision: 6fcb59c06f43a4e6b1bcb401f7686a8601a1fb4a
Groovy: 2.3.6
Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM: 1.7.0_40 (Oracle Corporation 24.0-b56)
OS: Windows 7 6.1 amd64
如果你没看到这些信息,检查你的安装,确保设置了环境变量。
任何缺少Groovy关于Gradle的讨论都是不完整的。Groovy是最受欢迎的运行于JVM上的语言。
Gradle有以下几个优点:
代码简洁
灵活
*使你能按你所想的配置
Groovy在其中扮演了重要的角色。不像在ant和Maven中使用的xml,Groovy是高级语言。所有高级语言有的特性,比如子句Groovy都支持。你希望Gradle运行的build文件确实是可以运行的代码。
一个问题是‘我需要学习Groovy吗?’我认为没必要,除非你不使用约定而是按你自己的方式做事情,这样你需要了解Groovy,因为这是Gradle灵活的来源。一般情况下,你只使用接下来将会看到的build.gradle模板,尽管它包含Groovy语法,但你不需要完全明白细节。
所以,尽管不需要你很好的掌握Groovy才能理解Gradle,但它帮助你更好的了解Groovy的威力。
现在我们还没有写任何源代码或gradle文件,我们接下来会这么做。我们尝试接下来的几个命令:
gradle -q help
这个命令打印基本的帮助信息。-q参数指定为静默模式,当有很多无效信息输出时,这很有效。
gradle -q tasks
这条命令列出了你可以使用的命令。
gradle properties
这条命令列出了许多预定义的属性。你可以修改修改这些属性在你的build文件中。
我们不准备编译java工程,这是下一篇做的事。我们现在理解Groovy给Gradle带来的威力。
开始之前,我们先讲讲build.gradle文件。这是标准的build文件名。所有你希望执行的指令都放在这里。这个系列的教程,我们会在build.gradle文件上创建使用各种插件/任务,来帮我们编译、构建、测试、运行java应用。
现在,我们做以下尝试:
在一个文件夹,比如example1,创建build.gradle。
写入如下内容:
task compileTask << {
System.out.println "compiling..."
}
现在在你创建该文件的目录下打开终端,输入如下命令:
gradle -q tasks
这条命令将会列出所有的你能执行的任务,你会注意到除了标准的任务,还有我们创建的任务compileTask
Other tasks
-----------
compileTask
这引出了我们的第一个概念我们的gradle构建文件由一系列我们指定的任务构成,gradle构建系统为我们执行这些任务。目前我们指定的任务是compileTask,如你看到的Groovy代码,我们唯一做的是System.out.pritnln。记住Groovy是高级语言。
现在,我们怎么运行compileTask呢?
在我们开始前,有一点要明白,当我们执行gradle命令时,它会在当前目录中寻找build.gradle文件。如果找到就是用它。前面的例子中,系统可以找到它,他决定了哪些任务可以被执行。
如果我们只输入gradle不带任何参数,也不指定任何任务会发生什么。我们试试看:
gradle
将会有如下输出:
:help
Welcome to Gradle 2.2.1.
To run a build, run gradle <task> ...
To see a list of available tasks, run gradle tasks
To see a list of command-line options, run gradle --help
BUILD SUCCESSFUL
Total time: 2.39 secs
这很清楚的告诉你你需要指定任务名。比如gradle 。我们给出如下命令:
gradle -q compileTaks
将会有如下输出:
compiling...
我们改进下build.gradle文件增加另一个任务,现在看起来像这样:
task compileTask << {
System.out.println "compiling..."
}
task buildTask << {
System.out.println "building..."
}
现在,如果你给出如下命令:
gradle -q tasks
你会发现这两个任务都会列在oterTasks下:
Other tasks
-----------
buildTask
compileTask
你可以运行这些任务通过gradle compileTask 或 gradle buildTask。
如果我们想去创建一个默认的任务,以便我们不需要显示的指定任务名就可以执行。
为了达到这样的效果,修改build.gradle文件如下:
defaultTasks 'buildTask'
task compileTask << {
System.out.println "compiling..."
}
task buildTask << {
System.out.println "building..."
}
现在我们输入gradle -q,将会输出building...。
最后一部分需要注意的是任务间的依赖。如果我们想让buildTask依赖compileTask,以便如buildTask运行了,就行运行compileTask。
修改build.gradle文件如下:
defaultTasks 'buildTask'
task compileTask << {
System.out.println "compiling..."
}
task buildTask (dependsOn:compileTask) << {
System.out.println "building..."
}
现在执行gradle -q将会有如下显示:
compiling...
building...
我们在这个章节所讲的是非常基础的Gradle知识。将build文件作为一系列待执行的任务。如果你是java开发者有构建的经历,你会注意到这样的事实:要构建任何东西,我们需要去做如下的事:编译,构建,运行,测试,打包。这些在Gradle中都以任务存在。
我们不需要去手工写所有的这些任务,尽管你可以这么去做,只要你愿意。使用Gradle遵循的约定和插件(plugins),我们可以执行一系列步骤去构建我们的工程。
现有的插件有如java plugin, WAR pluginn, AppEngine plugin, Android plugin等,这些插件给出了预定义的任务。后面的章节,我们将会看到更多。
在下一章中,我们将使用gradle去编译构建java工程。