原文地址:http://rominirani.com/2014/07/28/gradle-tutorial-part-1-installation-setup/
在这篇教程里,我们将主要讲解如何在我们自己的系统上安装、配置、原始版本的Gradle,并学习一些基本的Gradle命令行!Android Studio 本身集成了一个内部版本的Gradle,在安装Android Studio的时候,就自动给安装上了,这对于我们这样的小白对Gradle的理解没有帮助意义,所以我们单独将Gradle原始版本安装并配置独立出来便于我们的理解Android Studio里面的Gradle。
在开始之前,如果你想知道为什么Gradle对于编译来说是一个好工具,我建议你读一下这篇文章,虽然你不读也能读懂下面的内容,但是读一下或许能帮助打开你的思想,让你理解为什么很多公司和开发人员都在研究并应用Gradle!
下面的系列步骤将教你如何在你自己的电脑上配置Gradle!Gradle需要JDK,所以我假设你就是一个java开发者,并知道如何在你电脑上安装 JAVA JDK!
下载Gradle
在写作的时候,Gradle 已经发布到2.0,可以在这里下载。
先下载那个gradle-2.0-all.zip文件到你的电脑上,并解压,我将其解压到我的电脑的D:\Program Files\gradle-2.0-all。解压后有这些文件
你可能会问:为什么要安装一个原始版本的Gradle?Android Studio 本身只是简单的集成Gradle,当你使用Android Studio 在创建APP的时候,Android Studio 会调用Gradle的命令来做一些事情,而Android Studio 是如何在做这些事情的呢?如果你安装这个单独版本的Gradle,并使用其命令行来完成,你就很容易的知道Android Studio 在如何做了,否则的话,你会误以为Android Studio如何使用Gradle就是在玩魔术。
设置环境变量
\bin 文件夹包含了gradle脚本文件(unix和windows 都有),如果你要使用这个脚本,你就需要如下步骤:
1. 创建一个环境变量 GRADLE_HOME,并指向你的Grdle的安装路径,在我的电脑,这样添加:
2. 添加 %GRADLE_HOME%\bin 到你的PATH 环境变量,这样你就可以在CMD中任意使用gradle命令行了!
检查配置
为了检查刚才所设置的变量是否成功,你打开CMD,并执行如下命令:
gradle –v
如果配置成功就会有如下结果:
如果你没有看到这样的内容,那就检查一下路径是否正确。
关于Groovy
只要有Gradle就应该有Groovy,离开Groovy讨论Gradle是不完整的!Groovy是一个在JVM上非常流行并且强大的语言。
Gradle使用最受欢迎的特点有:
简洁
灵活
可以照你想象的方式自由配置
Groovy在实现上面的这些特性时扮演了非常重要的角色,基本就是Groovy提供这些功能的实现。Ant与Maven在编译时使用XML文件,而Groovy语言比XML文件要灵活强大很多,因为它不仅让文件在内容上看起来更加简洁,并且它提供修改或者制定标签的强大的可编程能力,也支持闭包等最新编程语言才具有的高级特性,并且可以实时编译!
那么问题就来了,你可能就会问:我需要去学习Groovy吗?
我试着回答你,不需要!除非你真的需要不按照约定去做一些你自己需要的需求,那么你可能就需要去学习Groovy,因为Gradle的弹性与灵活性就表现在这里,你可以照你想的方式来做一切。但是对于大多数情况,你只需要使用各种build.gradle模板(包含了 Groovy DSL),根本就不需要学习Groovy!
所以,要理解Gradle不需要你去好好的学习Groovy,当然如果你想理解Groovy的全部强大功能,你也可以自己去学习。这肯定会是有好处的!
Groovy在默认安装Gradle的时候,就已经安装了一个内部版本了,所以你不需要再去下一个独立版本的Groovy!
基本Gradle命令
我们还没有写任何源代码或者编译文件(Gradle),所以一会我们就来写。现在先来试试下面这个命令行:
gradle -q help
这个命令用来展示Gradle的帮助信息
-q:用来表示dos窗口中退出信息 ,这个命令在你只需要看一些输出的时候非常有用
gradle –q tesks
这个展示一个你当前可以使用的任务列表
gradle properties
这个将展示一个属性列表,这些属性gradle已经预定配置好的,你也可以修改大多数的实行在你自己的编译文件里。这些属性给你一个暗示:Gradle在执行你的任务之前为你的项目配置会做一大堆非常繁重的工作!
我们还没有编译自己的JAVA项目,这个会在以后的系列来做,我们先要理解Groovy是如何给Gradle提供了那一整套强大的编程能力!
我们先讨论一下build.gradle文件。这个标准的文件名就是我们自己的编译文件。这个文件包含了所有你需要Gradle去执行的命令。在完成了整个教程系列之后,我们就能够非常有效的去使用这个文件去创建或者使用各种顺序的插件、任务来完成我们自己的编译、测试、运行java程序的工作!
现在,你来跟着我做:
选择一个文件夹,在里面创建一个文件build.gradle
用记事本或者其他编辑器,将下面的内容添加的build.gradle文件里
task compileTask << {
System.out.println “compiling…”
}
现在打开CMD,并定位到你所创建的文件夹(使用 cd命令,你应该会吧),执行下面的代码
gradle –q tasks
这个就会输出一个可用的各种任务(tasks)列表,并且你会注意到在输出部分,与标准任务分开的,会有一个我们自己的创建的那个任务 compileTask:
我们的编译文件(build.gradle)就是一些列的任务(task)的组合,这里就带出了第一个的概念任务(task),任务指定了gradle编译系统要为我们执行的代码。
当前我们所指定的项目被称作compileTask,就如你所看到的,我们使用了Groovy代码来定义这个任务,这个任务所要做的事情,就是简单的执行一个 System.out.println。怎么样,现在能体会Groovy是如何强大了吧!
现在,我们要如何使用命令执行这个compileTask呢?
在做这个之前,我们还有一个知识点需要理解。当我们执行一个 gradle命令时,gradle编译系统就会在当前目录寻找文件名为build.gradle的文件。如果找到了,就使用这个文件。在我们上面的例子中,gradle编译系统找到了这个文件,所以gradle编译系统就将决定这个文件里是什么样的任务,并将其任务加到gradle编译系统的可执行任务里表里面去。
那么,我们执行即不带任何参数的gradle的命令,也不指定任何要被执行的任务时,会发生什么呢?现在试试,执行吧:
gradle
你应该会看到如下的输出:
这个输出很明显的告诉你,当你执行gradle的时候,你需要指定一个任务名。比如:gradle <task>。那么就让我们就试试使用我们自己的任务会是什么效果:
gradle –q compileTask
就有一个输出消息
现在让我们增加build.gradle文件一些其他的任务,比如:
task compileTask << {System.out.println “compiling…”
}
task buildTask <<{
System.out.println “building…”
}
现在执行下面的命令:
gradle –q tasks
你应该会看到两个列表都在otherTasks里面:
现在你就可以执行
gradle compileTask
或者
gradle buildTask
那么如果我们想创建一个默认被执行的任务,可以让我不需要制定任务名要如何做呢?
要做到上面的需求,修改build.gradle文件
defaultTasks ‘buildTask‘
task complieTask << {
System.out.println "compling..."
}
task buildTask <<{
System.out.println "building..."
}
现在,如果我们简单的执行gradle -q,就会有如下输出:
最后一部分要讨论的,就是任务之间的相互依赖。这个问题是这样的情况:如果buildTask执行了,那么compileTask一定要在buildTask之前执行,这样就是说buildTask依赖于compileTask。要如此做,我们需要修改build.gradle文件如下:
defaultTasks ‘buildTask‘
task compileTask << {
System.out.println "compling..."
}
task buildTask(dependsOn:compileTask) <<{
System.out.println "building..."
}
你再次执行gradle -q,就应该有如下输出:
我们这篇文章里所讨论的gradle只有一些非常基本的功能。把你的编译文件想象成一些列的需要被执行的任务。如果你是一个java程序猿,并且对编译处理有一些经验(ant,Maven),那么你应该知道,要编译任务东西,我们都要做编译,构建,跑测试用例,打包等等等等,但是在Gradle里面通通没有这些了,只有各种任务。
通过使用的Gradle规定的约定和插件程序,我们并不需要手动去写任何任务。就能够自己定义一些列的步骤来构建文明之间的项目!
目前有的一些插件程序有 java plugin ,war plugin,appengine plugin, android plugin等等,那些已经定义一些列你可以使用的任务,我们也将在接下来的课程里看到更多!保持进步哦……