本文目录
1.Gradle概述
2.下载、环境变量配置
3.Idea构建Gradle项目
4.使用Gradle进行打包
5.Gradle配置文件解析
6.Gradle jar包问题处理
Gradle使用越来越频繁,网上搜集资料做一个小小的记录。
1.Gradle概述
ANT是最早的构建工具,基于idea,好象是2000年有的,当时是最流行java构建工具,不过它的XML脚本编写格式让XML文件特别大。对工程构建过程中的过程控制特别好。
Maven它是用来给Ant补坑的,Maven第一次支持了从网络上下载的功能,仍然采用xml作为配置文件格式,它的问题是不能很好的相同库文件的版本冲突。Maven专注的是依赖管理,构建神马的并不擅长。
Gradle属于结合以上两个的优点,它继承了Ant的灵活和Maven的生命周期管理,它最后被google作为了Android御用管理工具。它最大的*区别是不用XML作为配置文件格式,采用了DSL格式,使得脚本更加简洁。
在 Gradle 中非常重要的两个对象:Project和Task。
每个项目的编译至少有一个 Project,一个build.gradle就代表一个project,每个project里面包含了多个task,task 里面又包含很多action,action是一个代码块,里面包含了需要被执行的代码。
在编译过程中, Gradle 会根据build 相关文件,聚合所有的project和task,执行task 中的 action。因为build.gradle文件中的task非常多,先执行哪个后执行那个需要一种逻辑来保证。这种逻辑就是依赖逻辑,几乎所有的Task 都需要依赖其他 task 来执行,没有被依赖的task 会首先被执行。所以到最后所有的 Task 会构成一个有向无环图(DAG Directed Acyclic Graph)的数据结构。
编译过程分为三个阶段:
初始化阶段:创建 Project 对象,如果有多个build.gradle,也会创建多个project.
配置阶段:在这个阶段,会执行所有的编译脚本,同时还会创建project的所有的task,为后一个阶段做准备。
执行阶段:在这个阶段,gradle 会根据传入的参数决定如何执行这些task,真正action的执行代码就在这里.
Gradle是一个好用的构建工具,优点有:
1、配置相关依赖代码量少,不会像maven一样xml过多
2、打包编译测试发布都有,而且使用起来方便
3、利用自定义的任务可以完成自己想要的功能
2.下载、环境变量配置
下载地址http://services.gradle.org/distributions/
下载你所需要对应的版本,如最新的4.8.1,一般下载bin.zip就可以
gradle-4.8.1-src.zip 21-Jun-2018 08:04 +0000 28.64M
gradle-4.8.1-src.zip.sha256 21-Jun-2018 08:04 +0000 64.00B
gradle-4.8.1-bin.zip 21-Jun-2018 08:04 +0000 72.37M
gradle-4.8.1-bin.zip.sha256 21-Jun-2018 08:04 +0000 64.00B
gradle-4.8.1-all.zip 21-Jun-2018 08:04 +0000 105.76M
下载后解压到你想要的目录,下载gradle-4.3.1-bin.zip
设置环境变量
在cmd模式下查看,出现以下信息证明安装成功
3.Idea构建springboot的Gradle项目
4.使用Gradle进行打包
双击war
打包完成之后的war文件会在
然后把war放入对应的tomcat目录即可
5.Gradle配置文件解析
settings.gradle是用来管理多项目的,里面包含了项目的name
在build.gradle中,apply是应用的插件,如:
这里我们用了java和war的插件
dependencies是用于声明这个项目依赖于哪些jar
这里说明的是,测试编译阶段我们依赖junit的jar
其中包括complile(编译时)runtime(运行时)testCompile(测试编译时)testRuntime(测试运行时)
repositories是一个仓库gradle会根据从上到下的顺序依次去仓库中寻找jar
这里我们默认的是一个maven的中心仓库
从gradle源代码中我们看到地址是这样的
这里可以配置
mavenLocal() 使用本地maven仓库
mavenCentral() 使用maven中心仓库
maven{
url '你的地址'
}
使用固定的地址,这里可以使用阿里云的镜像下载速度会快一些,然后也可以使用公司内部的私服地址
maven {url 'http://maven.aliyun.com/nexus/content/groups/public/'}
对于一个gradle 项目,最基础的文件配置如下:
一个项目有一个setting.gradle、包括一个顶层的build.gradle文件、每个Module 都有自己的一个build.gradle文件。
setting.gradle:这个 setting 文件定义了哪些module 应该被加入到编译过程,对于单个module 的项目可以不用需要这个文件,但是对于 multimodule 的项目我们就需要这个文件,否则gradle 不知道要加载哪些项目。这个文件的代码在初始化阶段就会被执行。
顶层的build.gradle:顶层的build.gradle文件的配置最终会被应用到所有项目中。它典型的配置如下:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath'com.android.tools.build:gradle:1.2.3'
}
}
allprojects{
repositories{
jcenter()
}
}
buildscript:定义了 Android 编译工具的类路径。repositories中,jCenter是一个著名的 Maven 仓库。
allprojects:中定义的属性会被应用到所有 moudle 中,但是为了保证每个项目的独立性,我们一般不会在这里面操作太多共有的东西。
每个项目单独的 build.gradle:针对每个moudle 的配置,如果这里的定义的选项和顶层build.gradle定义的相同,后者会被覆盖。典型的 配置内容如下:
apply plugin:第一行代码应用了Android 程序的gradle插件,作为Android 的应用程序,这一步是必须的,因为plugin中提供了Android 编译、测试、打包等等的所有task。
android:这是编译文件中最大的代码块,关于android 的所有特殊配置都在这里,这就是又我们前面的声明的 plugin 提供的。
defaultConfig就是程序的默认配置,注意,如果在AndroidMainfest.xml里面定义了与这里相同的属性,会以这里的为主。
这里最有必要要说明的是applicationId的选项:在我们曾经定义的AndroidManifest.xml中,那里定义的包名有两个用途:一个是作为程序的唯一识别ID,防止在同一手机装两个一样的程序;另一个就是作为我们R资源类的包名。在以前我们修改这个ID会导致所有用引用R资源类的地方都要修改。但是现在我们如果修改applicationId只会修改当前程序的ID,而不会去修改源码中资源文件的引用。
buildTypes:定义了编译类型,针对每个类型我们可以有不同的编译配置,不同的编译配置对应的有不同的编译命令。默认的有debug、release 的类型。
dependencies:是属于gradle 的依赖配置。它定义了当前项目需要依赖的其他库。
6.Gradle jar包问题处理
默认情况下,如果有jar包冲突,gradle会自动依赖两个冲突jar包最新的一个版本,所以默认不需要进行管理。
如果真的出现无法解决的冲突,gradle也会出现明显的冲突提示,所以不需要担心
gradle会下载相关需要依赖的jar包,默认的本地存放地址是:C:/Users/(用户名)/.gradle/caches/modules-2/files-2.1
很多人和我一样不愿意放在C盘,所以需要修改位置,网上说很简单,只需要添加一个环境变量就可以了 如下
但是对于IDEA来说木有用(当然上面的环境变量还是要添加的),在IDEA中使用gradle需要修改下面的路径
这样修改之后你就可以发现已经在自己下载jar了。