本文同步发表在 http://www.simonme.org/?p=201
一、介绍
1. Gradle 是什么 Gradle 官方对其描述是:能自动构建、测试、部署、打包、生成静态页面,生成文档等等。Gradle整合了Ant对依赖管理的强大能力、灵活和maven的约定的优于配置的特性形成了一种更有效的构建方式。Gradle基于Groovy的领域定义语言,充满了创新。Gradle已经成为很多开源项目的编译系统的选择。
2. Gradle的特性 详细的参见其文档。
a. 通过声明来构建和通过约定来构建。
b. 基于编程来描述语言依赖。
c. 构建描述结构化。(使得你的构建代码更优雅,更清晰,更易复用)。
d. Deep API(提供很多hooks,允许你在构建的任何环节做监控和定制配置。)。
e. Gradle scales. f. 多工程构建。
g. 多种方式管理你的依赖(可以和maven和ivy仓库直接对接)...
二、Eclipse 安装Gradle插件(强烈建议全程fan/qiang)
1. 访问 http://dist.springsource.com/release/TOOLS/composite/e3.7/bookmarks.xml (可能要fan/qiang. 还有这个网址中的3.7是个变量,根据你的eclipse版本来确定。)。将这个xml文件保存到到本地.
2.然后按下图操作。 步骤5是 http://dist.springsource.com/release/TOOLS/gradle
然后一路next。
3. 安装后的配置 安装完以后, 是可以喝maven的插件一样,可以指定gradle装在哪里,还是使用插件自带的gradle warpper。看你自己需要。我用的默认自带的。(maven是建议指向自己安装的)
三、Gradle构建脚本基础
1. 基础安装 a. 需要JDK1.5+。具体步骤即是下载zip包,解压即可用。根据需要决定是否设置GRADLE_HOME环境变量和GRADLE_HOME/bin 目录是否加入系统PATH。 b. JVM参数配置。对于Gradle来说,配置JVM参数,可以通过GRADLE_OPTS和JAVA_OPTS来配置,诸如HTTP Proxy。也可以在gradle脚本的开头处设置。
2. Eclipse的gradle插件使用 若在不联网的情况下,用eclipse的gradle的插件创建gradle工程会失败。 错误信息如下: java.net.UnknownHostException: services.gradle.org at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at sun.net.NetworkClient.doConnect(Unknown Sourc
3. Gradle脚本基础
a. Everything in Gradle sits on top of two basic concepts: projects and tasks. Every Gradle build is made up of one or more projects. gradle中有两个重要概念,project和task。每一个gradle构建脚本都有多个project构成。一个project代表着你要构建的软件的一些部件。诸你要构建的要依赖外部什么。一个project可能代表一个jar lib,或者是一个web app。一个project也可能代表一个由多个工程build出来的多个jar包组装好的zip包。一个project并不一定代表要构建,也或许是去做一些事情,比如将你的应用发布到演示或者生产环境上。
b. 每一个project也是由多个task构成的。一个task代表一些原子的构建执行的工作片段。比如编译classes,创建jar,生成javadoc,发布一些压缩包到仓库。
下面就会涉及到Groovy的语法 具体的可以参见本博客另外一篇文章: Groovy简明学习
c. Hello World 创建一个build.gradle,写上如下代码:
task hello { doLast { println 'Hello World!' } }
gradle的 -b选项 表示指定编译脚本文件. 上面的脚本略作解释,定义了一个hello task,然后执行之。这个task等同于ant的target,但是gradle的task具有更强大的特性。
d. 更快捷的任务定义。
task hello << { println 'Hello world!' }
e. 字符串方法使用
task upper << { String someString = 'mY_nAmE' println "Original: " + someString println "Upper case: " + someString.toUpperCase() }
f. 迭代次数 task count << { 4.times { print "$it " } }
g. 任务依赖 task hello << { println 'Hello world!' } task intro(dependsOn: hello) << { println "I'm Gradle" }
h. 动态任务 4.times { counter -> task "task$counter" << { println "I'm task number $counter" } }
未完,待写
i. 操作已经存在的任务