Gradle入门

1.配置Gradle环境

Mac环境

安装以前首先要确保已经安装配置好了java环境,由于我安装的Gradle是4.7的,书上讲的是2.14.1的,因此我没有按照书上的,我参考了Gradle官网的安装步骤,4.7版本要求java版本最低是1.7的,由于个人java是1.8的,因此是能够了,咱们检查下java版本便可,若是低于1.7的话,就安装1.7以上便可。英文还能够的同窗能够直接对照官网的步骤来安装,神奇的传送门html

@MacPro:~% java -version
           java version "1.8.0_92"
复制代码

接着开始安装gradle,本来我想按照官网介绍的使用包管理器的方式安装的,无奈输入命令以后半天没有反应,多是命令行方式下载太慢了,我懒得等,就取消了,就下载了源码包进行安装配置,若是有同窗想用包管理器的方式安装的话,输入下面命令便可:java

$ brew install gradle
复制代码

等待完成安装便可。我仍是来介绍下使用源码包的方式安装步骤吧:vim

  1. 首先要下载安装包api

    能够选择下载二进制包和完整包,完整包包括二进制文件和文档还有源码,我下载的是完整包,完整包,你也能够选择下载二进制包,都同样的哈,二进制包缓存

  2. 解压下载的包 按照下面的步骤来便可,注意gradle的包的名字要是你下载的哦,bash

$ mkdir /opt/gradle
$ unzip -d /opt/gradle gradle-4.7-bin.zip
$ ls /opt/gradle/gradle-4.7
LICENSE  NOTICE  bin  getting-started.html  init.d  lib  media
复制代码
  1. 配置环境变量 将下面一行代码添加到你的环境变量便可,使用vim打开~/.bash_profile文件,将下面一行代码写入文件,保存退出
$ export PATH=$PATH:/opt/gradle/gradle-4.7/bin
复制代码

而后执行source ~/.bash_profile便可生效闭包

PS:若是你使用了例如zsh的话,好比我,还须要编辑下.zshrc文件,加入一行代码app

source ~/.bash_profile
复制代码

而后执行下面代码就OK了工具

source ~/.zshrc
复制代码
  1. 验证安装
$ gradle -v

------------------------------------------------------------
Gradle 4.7
------------------------------------------------------------

Build time:   2018-04-18 09:09:12 UTC
Revision:     b9a962bf70638332300e7f810689cb2febbd4a6c

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM:          1.8.0_92 (Oracle Corporation 25.92-b14)
OS:           Mac OS X 10.13.5 x86_64
复制代码

出现相似上面的信息便可学习

Linux和Windows环境

我没有使用Linux和Windows,若是有同窗使用这两种环境,请参考Gradle官网

1.2 Gradle版Hello World

首先,咱们新建一个目录,而后建立一个build.gradle文件,对,就像咱们Android中的build.gradle文件同样,仅仅名字同样哈,而后打开文件输入一下内容

task{
    doLast{
        println 'Hello world'
    }
}
复制代码

保存文件,打开命令行进入到文件所在目录下,执行命令:

$gradle -q hello
Hello world
复制代码

而后咱们就看到了一顿编译,而后获得了咱们想要的结果。下面咱们来分析下结果产生的步骤和缘由

  • build.gradle文件是gradle默认的构建脚本文件,执行Gradle命令的时候,会默认加载当前目录下的build.gradle脚本文件。(固然你能够指定构建文件,使用-b参数便可,-b, --build-file Specify the build file.)
  • 这个构建脚本定义一个任务,任务名字就是hello,而且给hello添加了一个动做,其实就是Groovy语言实现的闭包,在Task执行完毕以后要回调这里面的代码实现。
  • gradle -q hello 这段命令,意思就是要执行build.gradle脚本中定义的hello的Task,-q参数用于控制gradle输出的日志级别,以及哪些日志能够输出被看到
  • 最后就是println方法的调用,在Groovy语言中,方法的调用能够省略签名中的括号,以一个空格隔开便可,在Groovy中,单引号和双引号所包含的内容都是字符串,这点和java中不一样。

1.3 Gradle Wrapper

Wrapper,其实就是对Gradle的一层包装,便于在开发过程当中统一Gradle构建的版本,使得你们都使用统一的Gradle版本,避免由于Gradle版本不统一带来没必要要的问题

1.3.1 生成Wrapper

Gradle提供了内置的Wrapper task帮助咱们自动生成Wrapper所需的目录文件,在一个项目的根目录中输入gradle wrapper便可生成:

$gradle wrapper                                            

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
复制代码

咱们查看一下目录列表

|____gradle
| |____wrapper
| | |____gradle-wrapper.jar
| | |____gradle-wrapper.properties
|____gradlew
|____build.gradle
|____gradlew.bat
复制代码

gradlew和gradlew.bat分别是Linux和Windows下的可执行脚本,用法和gradle同样,gradle怎么用它们就怎么用,gradle-wrapper.jar是具体业务逻辑实现的jar包,gradlew最终仍是使用java执行的这个jar包来执行相关gradle操做,gradle-wrapper.properties是gradle的配置文件,用于配置使用哪一个版本的Gradle等。

1.3.2 Wrapper配置

咱们在执行gradle wrapper生成相关文件的时候,还能够指定一些参数,来控制Wrapper的生成

  • gradle wrapper --gradle-version 2.4,使用--gradle-version能够指定使用的Gradle的版本
  • gradle wrapper --gradle-distribution-url 这个会影响gradle-wrapper.propertiesw中的distributionUrl的值
  • 若是咱们在使用的时候不加任何参数,那么就会使用你当前Gradle的版本做为生成Wrapper的gradle version。

1.3.3 gradle-wrapper.properties

该文件是gradle wrapper的配置文件,咱们上面执行该任务的任何配置都会被写进该文件中,咱们比较关心的distributionUrl字段,这个决定你的gradle wrapper依赖哪一个Gradle版本,通常是这样的distributionUrl=https://services.gradle.org/distributions/gradle-4.7-bin.zip,咱们若是要看Gradle的源码的话,就把bin改为all就能够了,这个路径是下载Gradle的路径,若是裕兴./gradlew的时候一直卡着不动,多是由于官方的Gradle地址被封了,建议换成映像地址

1.3.4 自定义Wrapper task

gradle-wrapper.properties文件是由Wrapper Task生成的,其实咱们也能够自定义配置该Wrapper task来达到咱们配置gradle-wrapper.properties的目的,在build.gradle构建文件中加入以下脚本:

task wrapper(type:Wrapper){
    gradleVersion='2.4'
}
复制代码

这样咱们再执行gradle wrapper的时候就会默认生成2.4版本的wrapper了。 固然,你也能够把gradle-wrapper.properties文件中的值配置在这里。

1.4 Gradle日志

Gradle日志便于咱们遇到问题的时候分析问题,其实Gradle的日志和Android同样也是分级别的

1.4.1 日志级别

  • Error 错误消息
  • QUIET 重要消息
  • WARNING 警告消息
  • LIFECYCLE 进度消息
  • INFO 信息消息
  • DEBUG 调试消息 要使用它们,显示咱们想要显示级别的日志,就要经过命令行选项中的日志开关来控制,例如
$gradle -q tasks  //是输出QUIET级别及其之上的日志信息
$gradle -i tasks  //输出INFO级别及其之上的日志 信息

复制代码

若是不设置选项,就是默认输出LIFECYCLE级别及其之上的日志信息

1.4.2 输出错误堆栈信息

在使用Gradle构建的时候,不免会有问题致使失败,这时候咱们就须要根据日志来分析问题,Gradle还提供了堆栈信息的打印,默认状况下是关闭的,咱们须要经过命令行的方式打开

  • -s或--stacktrace 输出关键性的堆栈信息
  • -S或--full-stacktrace 输出所有堆栈信息 推荐使用-s,由于-S输出的堆栈信息太多太长,不便于查看。

1.4.3 本身使用日志信息调试

有时候咱们须要本身输出一些日志信息,来验证咱们的逻辑是否正确,一般状况下咱们可使用print系列方法

println '输出日志信息'  //被Gradle定向为QUIET级别日志
复制代码

除了print系列方法外,咱们还可使用logger更灵活的出书不一样级别的日志,

logger.quiet('quiet日志信息')
logger.error('error日志信息')
logger.warn('warn日志信息')
logger.info('info日志信息')
...
复制代码

这里其实就是调用的Project的getLogger()来获取的Logger对象的实例

1.5 Gradle命令行

1.5.1 记得使用帮助

命令行下的工具都有命令,基本上全部的命令行工具都有帮助,基本都很简单,Gradle Wrapper使用帮助的命令有如下几个

./gradlew -?
./gradlew -h
./gradlew -help
复制代码

1.5.2 查看全部可执行的Tasks

有时候咱们不知道如何构建一个功能,不知道执行哪一个Task,这时候就须要查看哪些Task可执行,都具有什么功能,经过运行./gradlew tasks --all命令,输出以下

> Task :tasks

------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Build Setup tasks
-----------------
init - Initializes a new Gradle build.
wrapper - Generates Gradle wrapper files.

Help tasks
----------
buildEnvironment - Displays all buildscript dependencies declared in root project 'gradle-test'.
components - Displays the components produced by root project 'gradle-test'. [incubating]
dependencies - Displays all dependencies declared in root project 'gradle-test'.
dependencyInsight - Displays the insight into a specific dependency in root project 'gradle-test'.
dependentComponents - Displays the dependent components of components in root project 'gradle-test'. [incubating]
help - Displays a help message.
model - Displays the configuration model of root project 'gradle-test'. [incubating]
projects - Displays the sub-projects of root project 'gradle-test'.
properties - Displays the properties of root project 'gradle-test'.
tasks - Displays the tasks runnable from root project 'gradle-test'.

Other tasks
-----------
hello

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
复制代码

能够看到,Gradle会以分组的方式列出Task列表,好比构建类的有init,wrapper,帮助类的有help、tasks等,还有咱们自定义的hello,其实,咱们的task和Gradle中的task都是同样的,都是能够执行的,不要以为很难理解。

1.5.3 Gradle Help任务

若是咱们想看一个task的帮助信息怎么办,简单,使用help task便可,例如:

./gradlew help --task tasks
复制代码

就能够显示tasks任务的帮助信息

> Task :help
Detailed task information for tasks

Path
     :tasks

Type
     TaskReportTask (org.gradle.api.tasks.diagnostics.TaskReportTask)

Options
     --all     Show additional tasks and detail.

Description
     Displays the tasks runnable from root project 'gradle-test'.

Group
     help

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
复制代码

从帮助信息里咱们能够看到这个Task有什么用,是什么类型,属于哪一个分组,有哪些可使用的参数,好比这里就有一个--all参数,能够查看不少额外的详细信息

1.5.4 强制刷新依赖

有时候咱们会依赖一些第三方库,而像Maven这类工具都是有缓存的,由于不可能每次编译的时候都去下载第三方库,缓存就是这个目的,先使用缓存,没有再下载,默认状况下,Maven会控制缓存的更新,可是有时候会使用snapshot版本,这个时候就须要强制刷新,只要在命令行运行的时候加上--refresh-dependencies参数就能够了

./gradlew --refresh-dependecies assemble
复制代码

1.5.5 多任务调用

若是咱们须要同时运行多个任务,好比在执行jar以前先进行clean,那么咱们就须要先执行clean对class文件清理,再执行jar生成一个jar包,若是还有更多的命令,只须要按顺序以空格分开便可

./gradlew clean jar
复制代码

1.5.6 经过任务名字缩写执行

有时候咱们的任务名字很长,若是在执行的时候所有拼写会浪费时间,为此Gradle提供了基于驼峰命名法的缩写调用,好比connectCheck,咱们执行的时候可使用./gradlew cc这样的方式来执行

好累,先把书里的代码逻辑执行看懂再来写进博客,挺麻烦的,有时候真的想放弃,可是,又想到不少像我这样想学习Gradle又没有系统资料的同窗,再加上本身若是只看书操做的话,又会很快忘记,就仍是坚持下来, 第一篇就先结束了,等待第二篇吧,我不是扔物线大神,没有那么忙,相信我,第二篇很快就出来啦。(也不会太快,hiahiahia!!!)

相关文章
相关标签/搜索