目录
Gradle版Hello World
新建一个目录,我这里是是GradleLearn,在这个目录下创建一个名为build.gradle的文件,编写这个文件:
task hello{
dolast{
println'hello world'
}
}
打开终端,移动到GradleLearn文件下,使用 gradle -q hello 命令来执行构建脚本:
gradle -q hello
hello world
最终打印出来我们想要的结果,简单的来分析一下步骤和原因,build.gradle是Gradle默认的构建脚本文件,执行Gradle命令的时候,会默认加载当前目录下的build.gradle脚本文件,也可以通过 -b 参数指定想要加载执行的文件。
这个构建脚本定义一个任务(Task),任务名字叫hello,并且给任务hello添加了一个动作,官方名字是Action, 其实它就是一段Groovy语言实现的闭包。
doLast{...}是task执行完毕之后就要回调doLast的这部分闭包代码的实现。
闭包:Groovy 中的闭包是一个开放的、匿名的代码块,可以接受参数、返回值并分配给变量。参考官方文档 闭包 ,不会英文的可以通过浏览器的来翻译成中文的来看。
gradle -q hello这段运行命令,就是要执行build.gradle脚本中定义,明为hello的Task。
-q 参数用于控制gradle输出日志的级别。
println'hello world' ,它其实就是System.out.println("hello world")的简写。Gradle可以识别它,是因为Groovy已经把println()这个方法添加到到java.lang.Object, 在Gradle中方法调用中可以省略括号的, 还有一点就是,在Groovy中,单引号和双引号所包含的内容都是字符串,在java当中,单引号是字符,双引号才是字符串。
Gradle Wrapper
gradle wrapper 其实就是对gradle的一层包装,便于在团队开发过程统一gradle构建的版本,可以避免团队开发过程中Gradle版本不一致的问题。
Wrapper在windows下是一个批处理脚本,在Linux下是一个shell脚本。
wrapper启动Gradle的时候,wrapper会检查Gradle有没有被下载关联,如果没有将会从配置的地址(一般是Gradle官方库)进行下载并运行构建,不需要专门配置环境,只要执行Wrapper命令,它就会自动搞定一切。
生成wrapper
Gradle提供内置的Wrapper task来帮助我们生成Wrapper所需要的目录文件,只需要在我们项目的根目录中输入gradle wrapper即可生成:

gradle和gradle.bat分别是Linux和windows下的可执行脚本,用法和gradle原生命令是一样的
gradle.wrapper.jar是具体的业务逻辑实现的jar包,gradle最终还是使用java来执行这个jar包。
gradle-wrapper.properties是配置文件,用于配置使用哪个版本得Gradle。
wrapper文件一般会提交到项目中的Git,这样其他开发人员就使用这里配置好的,统一的Gradle进行构建开发。
wrapper配置
在终端执行 gradle wrapper 生成相关文件的时候,可以指定一些参数,来控制Wrapper的生成,比如依赖的版本等,如表1-1。

在终端执行gradle wrapper --gradle-version 2.4 ,主要是配置Wrapper使用2.4版本的Gradle,它会影响gradle-wrapper.properties中的distributionUrl的值,该值得规则是:
http\://services.gradle.org/distributions/gradle-${gradle Version}-bin.zip
如果只执行 gradle wrapper,它会使用当前Gradle的版本,作为生成的Wrapper的gradle version。假如,当前安装的Gradle是2.8版本的,生成Wrapper的版本也是2.8。
gradle-wrapper.properties
该配置文件是 gradle wrapper 的相关配置文件,该文件的配置字段如下 表1-2。

distributionUrl是个非常重要的字段,它可以决定 gradle wrapper依赖那个Gradle版本,一般情况是这个样子的:http\://services.gradle.org/distributions/gradle-2.14.1-bin.zip ,通常情况下,把bin改为all,这样就是阅读Gradle源码了。
自定义Wrapper Task
gradle-wrapper.properties是由Wrapper Task生成的,可以通过自定义配置该Wrapper Task来达到配置 gradle-wrapper.properties的目的,在build.gradle构建文件中录入以下脚本:
task wrapper(type:Wrapper){
gradleVersion = '2.4'
}
再执行gradle wrapper的时候,不需要执行gradle wrapper --gradle-version 2.4, 直接执行 gradle wrapper就可以了。也可配置其他参数,

Gradle日志
日志级别
| 级别 | 用于 |
|---|---|
| ERROR | 错误消息 |
| QUITE | 重要消息 |
| WARNING | 警告消息 |
| LIFECYCLE | 进度消息 |
| INFO | 信息消息 |
| DEBUG | 调试消息 |
要显示指定级别的日志,可以通过日志开关来控制的,在执行的时候加入下面这些开关即可.
| 开关选项 | 输出的日志级别 |
|---|---|
| 无选项 LIFECYCLE | 及其更高级别 |
| -q 或者 --quite | QUITE |
| -i 或者 --info | INFO |
| -d 或者 --debug | DEBUG |
//输出的日志会是 QUITE 级别
gradle -q task
//输出INFO级别及其之上的日志信息。
gradle -i task
输出错误堆栈信息
默认情况下,堆栈信息的输出是关闭的,需要我们手打开它。
| 命令行选项 | 用于 |
|---|---|
| 无选项 | 没有堆栈信息输出 |
| -s 或者 --stacktrace | 输出关键堆栈信息 |
| -S 或者 -full-stacktrace | 输出全部堆栈信息 |
一般使用 -s 或者 --stacktrace 输出关键堆栈,输出全部堆栈信息就太多了,不好定位问题。
自定义日志
如何使用自定义的日志,通过Gradle提供的日志功能,来实现自定义日志。
一般情况下,我们经常是使用 println来打印出日志信息,(他是Gradle的QUITE级别日志)
println '输出重要的日志'
除了这些,还可以使用Gradle提供内置的logger,是调用Project的getLogger()方法获取对象的实例来实现的。
logger.quiet('quiet 重要消息')
logger.error('error 错误消息')
logger.lifecycle('lifecycler 进度消息')
logger.warn('warn 警告消息')
logger.info('info 消息 信息')
logger.debug('debug 调试信息')
Gradle命令行
命令行使用帮助
如果不会或者不知道命令,可以通过帮助来了解。(基本都在命令行后跟 -h或者 -help,也可以使用 -?)。
gradle -?
gradle -h
gradle -help
查看所有可执行的Tasks
通过运行 gradle tasks 命令,输出一下结果:

Gradle 以分组的方式列出Task列表,比如构建类的 init ,wrapper,帮助类:help,tasks,等。
Gradle Help任务
每一个命令行都有帮助类, Gradle还内置了一个help task,这个task可以让我们了解每一个task的使用帮助,用法 gradle help -task ,比如gradle help --tasks,就可以显示tasks任务的帮助信息:

从帮助信息可以看出,这个task有什么用,是什么类型,属于哪个分组,有哪些可以使用的参数,比如图中的 --all参数,可以查看很多的额外信息。
强制刷新依赖
强制更新Maven工具缓存使用的。
gradle build --refresh-dependencies
多任务调用
按照顺序执行任务,比如我执行jar之前,先执行clean,对calss文件进行清理,在进行通过jar生成一个jar包,
只需要按照顺序已空格分开即可,比如 gradle clean jar ,这样就可以了。
缩写任务名字执行
定义任务名字太长,可以通过使用Gradle提供基于驼峰命名法来进行缩写,
比如 migrationFiles ,一般我我们执行的是:gradle migrationFiles, 也可以:gradle mf 。
参考书籍:Android Gradle权威指南
1978



被折叠的 条评论
为什么被折叠?



