Gradle系列之初识Gradle

原文首发于微信公众号:躬行之(jzman-blog)

学习 Android 有一段时间了,开发中经常使用到 Gradle ,但是不知道 Gradle 构建项目的原理,计划花一点时间学习一下 Gradle 相关的知识。Gradle 是一个非常优秀的项目构建工具,其 DSL(领域特定语言)基于 Groovy 实现,大部分功能通过插件的方式来实现,也可以自定义 Gradle 插件,下面开始入门 Gradle 系列的第一篇。

配置 Gradle 环境

首先确保在环境变量中配置好 JAVA_HOME,使用如下命令查看是否配置:

java -version

执行日志如下:

在这里插入图片描述

准备一个 Gradle 版本,下载之后进行解压,解压之后的目录说明如下:

bin:gradle批处理文件
docs:说明文档
init.d:初始化的脚本文件
lib:相关库
media:自带的图标资源
samples:案例
src:源文件
getting-started.html:入门指导链接
LICENSE
NOTICE

然后在环境变量中配置 GRADLE_HOME ,具体指的是 Gradle 的解压目录:

在这里插入图片描述

然后,添加将 GRADLE_HOME\bin 配置到 Path 中,具体如下:

在这里插入图片描述

然后打开控制台,使用命令 gradle -v 查看 Gradle 版本信息,如果能够正确显示 Gradle 版本号、Groovy 版本号、JVM 等相关信息,说明 Gradle 环境已经配置成功,配置成功 gradle -v 执行结果参考如下:

PS E:\Gradle\study> gradle -v
------------------------------------------------------------
Gradle 4.1
------------------------------------------------------------

Build time:   2017-08-07 14:38:48 UTC
Revision:     941559e020f6c357ebb08d5c67acdb858a3defc2

Groovy:       2.4.11
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_91 (Oracle Corporation 25.91-b14)
OS:           Windows 10 10.0 amd64

此时,Window 上的 Gradle 构建环境就搭建好了。

Gradle 版 Hello World

学习任何一门语言,毫无疑问当然是运行 Hello World ,这里实现一个 Hello World 的 Gradle 脚本,创建一个名为 build.gradle 的脚本,脚本内容如下:

task hello{
	doLast{
		println 'Hello world'
	}
}

使用 gradle -q hello 命令执行上述脚本,结果如下:

PS E:\Gradle\study> gradle -q hello
Hello world

build.gradle 是 Gradle 默认的构建脚本文件,执行命令时会默认加载当前目录下的 build.gradle 脚本文件,这个构建脚本定义了一个名为 hello 的任务(Task),里面的 doLast 是 Task 中的一个 Action,当这个 Task 执行完毕之后要回调 doLast 里面的代码,使用 gradle 命令时的参数 -q 是指定输出的日志级别,关于 gradle 日志输出级别将在下文中介绍。

Gradle Wrapper

Wrapper 是对 Gradle 的一层包装,方便在团队中统一管理 Gradle 的版本,项目开发中通常使用的 Wrapper 这种方式,使用 Wrapper 之后就不需要采用配置 Gradle 的构建环境的方式,使用 Wrapper 启用 Gradle 的时候,Wrapper 会检查 Gradle 有没有下载关联,如果没有下载则从配置的地址下载并进行构建,这就一定程度上方便开发人员构建项目。

生成 Wrapper

Gradle 提供了内置的 Wrapper Task 来生成 Wrapper 所需的目录文件,在相应的目录执行 gradle wrapper 命令即可生成,参考如下:

PS E:\Gradle\study> gradle wrapper

BUILD SUCCESSFUL in 3s
1 actionable task: 1 executed
PS E:\Gradle\study> cd wrapper

使用 gradle wrapper 生成的文件目录如下:

│─gradlew
│─gradlew.bat
└─gradle
    └─wrapper
            gradle-wrapper.jar
            gradle-wrapper.properties

其中 gradlew 和 gradlew.bat 分别是 Linux 和 Window 下的可执行脚本,使用方式和原生的 gradle 命令一样,gradle-wrapper.jar 是根据具体业务实现的 jar 包,gradlew 最终还是通过这个 jar 包来执行相关的 gradle 相关操作,gradle-wrapper.properties 是用来配置使用哪一个版本的 gradle 进行构建操作。

Wrapper 配置

在使用 gradle wrapper 生成相关文件的时候,可以指定 wrapper 要使用的版本号以及 gradle 的下载地址,命令如下:

//指定使用的Gradle版本
gradle wrapper --gradle-version 3.3
//指定下载Gradle的地址
gradle wrapper --gradle-distribution-url ...

Gradle 默认的版本是当前 Gradle 的版本,下载地址参考如下:

https\://services.gradle.org/distributions/gradle-4.1-all.zip

下面来看一看 Gradle 的配置文件 gradle-wrapper.properties 的几个字段含义:

distributionBase //下载的Gradle压缩包解压后存储的主目录
distributionPath //相对于distributionBase解压后压缩包的路径
zipStoreBase //相对于distributionBase存放Gradle压缩包的
zipStorePath //相对于distributionPath存放Gradle压缩包的
distributionUrl //Gradle的下载地址,一般是官网地址

下面是一个 Android 项目的 Gradle 的配置文件,参考如下:

#Mon Dec 28 10:00:20 PST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip

顺便介绍一下几个属性值:

//表示用户目录,用户目录下 .gradle 下的目录
GRADLE_USER_HOME
//表示项目目录,项目底下 gradlew 所在的目录
PROJECT

这两个值可以用来设置 distributionBase 和 zipStoreBase 的值

自定义 Wrapper Task

Gradle 的配置文件 gradle-wrapper.properties 是由 Wrapper Task 生成的,可以不通过自定义 Wrapper Task 可以用来配置 gradle-wrapper.properties 文件,下面是自定义 Wrapper Task 的一个实例,

task wrapper(type: Wrapper){
	gradleVersion = '3.3'
	distributionBase='GRADLE_USER_HOME'
	distributionPath='wrapper/dists'
	//注意不要这样写:https\://services...
	distributionUrl="https://services.gradle.org/distributions/gradle-3.3-all.zip"
}

这样可以定义生成 Wrapper 的 Gradle 版本及相关存储目录。

Gradle 日志

使用 Gradle 构建项目时,可以指定日志级别来显示相关的日志信息,Gradle 的日志级别主要有六种,具体如下:

ERROR //错误消息
QUIET //重要消息
WARNING //警告消息
LIFECYCLE //进度消息
INFO //信息消息
DEBUG //调试信息

使用时可以通过命令行的方式控制日志显示级别,下面是可以使用命令控制的日志选项,具体如下:

-q 或 --quiet //表示QUIET及其更高级别
-i 或 --info //表示INFO及其更高级别
-d 或 --debug //DEBUG 及其更高级别(输出所有日志)

如果不指定,则默认输出的日志是 LIFECYCLE 及其更高级别的日志。

日志主要跟踪构建过程以及调试错误,下面介绍在项目构建过程中堆栈信息的输出以及如何使用日志信息来进行调试。

输出堆栈信息

默认情况下,堆栈信息的输出是关闭的,可以通过命令行的堆栈信息开关打开它,当构建失败后,Gradle 会将输出错误的堆栈信息,方便定位和分析问题,具体如下:

-s 或 --stacktrace //输出关键性的堆栈信息
-S 或 --full--stacktrace //输出全部堆栈信息

一般使用 -s 就可以了。

日志信息调试

最简单的日志记录当然是在合适的位置打印想要看的变量即可,可以使用 print 系列方法将日志输出到控制台,这属于 QUIET 级别的日志,也可以使用内置的 logger 来控制不同级别日志的显示,及 DEBUG 输出日志最完整、ERROR 输出日志最少,使用方式参考如下:

//日志测试
task hello{
	doLast{
		println 'Hello world'
		print 'Hi'
		logger.quiet('quiet 日志')
		logger.lifecycle('lifecycle 日志')
		logger.error('error 日志')
		logger.info('info 日志')
		logger.warn('warn 日志')
		logger.debug('debug 日志')
	}
}

Gradle 日志基本内容如上,多在实际项目中实践才是最重要的。

Gradle 命令行

使用命令行在一定程度上了解构建过程,相较在 IDE 上的便捷性,使用命令行可以知其然知其所以然,只要是可以使用命令行的,都可以通过帮助获取命令来查看可执行的命令,参考如下:

gradle -h
gradle -?
gradle -help

可以通过如上命令查看可执行的命令。

查看可执行 Tasks

这里以 Wrapple 为例,可以使用 ./gradlew tasks 查看可执行的 Tasks,执行结果以分组形式输出,一个是关于构建的(Build Setup tasks),另一个是关于帮助的(Help tasks),执行结果如下:

PS E:\Gradle\study\wrapper> ./gradlew tasks
:tasks

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

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

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

To see all tasks and more detail,run gradlew tasks --all

To see more detail about a task,run gradlew help --task <task>

BUILD SUCCESSFUL

Total time: 8.4 secs

查看某个 Task 的帮助

Gradle 内置一个 help task,这个 Task 可以可以了解某一个 Task 的使用帮助,具体命令如下:

//命令格式
gradle help --task Task名称
//举例
gradle help --task projects

执行结果参考如下:

PS E:\Gradle\study\wrapper> gradle help --task projects

> Task :help
Detailed task information for projects

Path
     :projects

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

Description
     Displays the sub-projects of root project 'wrapper'.

Group
     help


BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed

通过 Task 的帮助信息可以看到当前 Task 的分组、类型以及额外参数。

此外,开发中常常使用第三方库,那么如何强制刷新第三方依赖呢,使用命令构建项目的时候添加参数 --refresh-dependencies,有时候需要同时运行多个任务,可将具体的任务使用空格分开,如 ./gradlew t1 t2,Gradle 提供了基于驼峰命名法的缩写调用,可以使用如下方式简写调用:

//Task
newTask
//命令
./gradlew nt

总结

这是初识 Gradle 的第一篇文章,主要对 Gradle 及相关命令有了一定的了解,也是以后学习 Gradle 构建项目的基础,关于 Gradle 的学习希望能够将这个系列写完。

如果感兴趣,可以关注公众号:躬行之(jzman-blog),一起交流学习。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


安装环境都很简单,就是下载工具需要在华为开发者联盟里注册,然后认证,扫码认证我这边是不可以的,人工认证需要两个工作日审核安装成功之后遇到了很多报错,网上都是可以解决的,遇到下面这个报错网上查了很多方式也解决不了,于是记录一下  找了很久,发现网上说的我都配置了,添加 allow
上传的方式有两种,第一种是通过bintray官方出的插件bintray/gradle-bintray-plugin第二种是一个国外组织开源的插件novoda/bintray-release 这里讲bintray/gradle-bintray-plugin  1.在项目根目录下的 build.gradle 添加插件依赖 dependencies{classpat
转载自: 完美解决Error:SSLpeershutdownincorrectly打开gradle文件夹下的gradle-wrapper文件修改其中的配置文件将红色区域修改为http://services.gradle.org/distributions/等待编译完成
https://www.jianshu.com/p/9220227cdfb3buildscript{ext.kotlin_version='1.2.71'repositories{google()jcenter()}dependencies{//classpath'com.android.tools.build:gradle:3.1.0-alpha09'
Markdown版本笔记我的GitHub首页我的博客我的微信我的邮箱MyAndroidBlogsbaiqiantaobaiqiantaobqt20094baiqiantao@sina.com发布库到仓库mavenjcenterJitPackMD目录目录通过AS创建aar的步骤发布到Github仓库【推荐】创建项目配置项目构建并上传上传
 跟着教程做的,已经有了JDK,直接进行后面的步骤,下载安装AndroidSDK没有FQ,教程里的网址打不开,就换了个。网址http:/ools.android-studio.org/index.php/sdk下的.exe  nextinstall然后就是漫长的等待 ……先这样吧开始下载AndroidStudio,网址http://www.and
今天更新了universal-image-loader-1.9.5.jar文件,studio死活找不到其中相关的类,上网百度试了很多办法,总算解决了,具体方法跟一篇老外的帖子的差不多,这里分享下。 解决步骤:Somethingwentwronginincrementalbuildsystem.Oneofthisshouldhelp:MenuBuild->Rebuild
https://blog.csdn.net/zxc514257857/article/details/80425711编写不易,如有转载,请声明出处:梦回河口:https://blog.csdn.net/zxc514257857/article/details/80425711报错一:Error:Unabletofindmethod'com.android.build.gradle.tasks.factory.AndroidJavaCompile.setDepe
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow                     创建兼容AndroidStudio和eclipse的AS工程虽然我的博客名叫eclipse_xu,但是我已经将
gradle跳过测试直接编译gradlebuild-xtest  根据build.gradle和setting.gradle文件生成idea项目:gradleidea  gradle这几年发展迅猛,github越来越多的项目都开始采用gradle来构建了,但是并不是所有人都对gradle很熟悉,下面的方法可以把gradle转成maven项目,前提gradle项
本地仓库配置配置环境变量GRADLE_USER_HOME,并指向你的一个本地目录,用来保存Gradle下载的依赖包。 远程仓库配置一般Gradle、maven从中央仓库mavenCentral()http:/epo1.maven.org/maven2/下载依赖包,但是在国内下载速度巨慢,我们只能使用国内的镜像。所以每个Gradle构建的项目
what:Buildtool(构建工具)是从源代码自动创建可执行应用程序的程序。构建包括将代码编译,链接和打包成可用或可执行的形式。在小项目中,开发人员通常会手动调用构建过程。这对于较大的项目来说是不实际的,在这些项目中,很难跟踪需要构建的内容,构建过程中的顺序和依赖关系。使用自动化工
说明:该示例为在windows系统下自动化部署springboot架构:springboot+github+gradle+jdk8各种配置步骤及截图说明:1、配置git,gradle及jdk  系统管理→全局工具配置  说明:其中git配置项中的PathtoGitexecutable要指到git.exe文件,maven的配置方式和gradle类似
AndoridStudio模块化开发相关配置下面以宿主APP模块和Uer_Module模块为例:第一步:在项目根目录gradle.properties配置文件中添加如下代码isNeedUserModule=true#isNeedUserModule=false 第二步在user_module中的build.gradle文件中加入了如下代码来控制此库是library还
buildtools构建工具能够帮助你创建一个可重复的、可靠的、携带的且不需要手动干预的构建。构建工具是一个可编程的工具,它能够让你以可执行和有序的任务来表达自动化需求。假设你想要编译源代码,将生成的class文件拷贝到某个目录,然后将该目录组装成可交付的软件。如下图所示,展示了所
Git及用法Git是目前世界上最先进的分布式版本控制系统。Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上
打release包的时候,出现这个玩意,但debug直接跑apk又没问题。Causedby:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:ExpectedanamebutwasSTRINGatline1column99path$[0].apkInfo.versionNameatcom.google.gson.internal.bind.
android\gradle\wrapper\gradle-wrapper.properties由distributionBase=GRADLE_USER_HOMEdistributionPath=wrapper/distszipStoreBase=GRADLE_USER_HOMEzipStorePath=wrapper/distsdistributionUrl=https\://services.gradle.org/distributions/gradle-2.12.1-all.
1.上传本地仓库1.1build.gradle项目设置plugins{id'java'id'maven'//引入maven插件}group'com.inkyi'//包名version'1.0.1-SNAPSHOT'//版本号1.2 build.gradle上传设置//指定上传的路径deflocalMavenRepo='file://'+new
Gradle的Emas服务插件会加载您下载的aliyun-emas-services.json文件。请修改工程的build.gradle使用该插件。配置步骤如下:1.修改项目级目录下build.gradle({project}/build.gradle):1buildscript{2repositories{3maven{4url'http://maven.aliyun.com