基于Apache Ant和Apache Maven概念的项目自动化构建开源工具,基于Groovy这个特定DSL语言来进行声明项目设置,也增加了基于Kotlin语言的kotlin-based DSL。
简介:Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。
特点:
①可切换的,像maven一样的基于约定的构建框架(约定优于配置)。
②多工程。
③依赖管理(基于Apache Ivy)。
④支持已有的Maven或者Ivy仓库。⑤支持传递性依赖管理,不需要使用pom.xml和ivy配置文件。
前提:下载安装好JDK
2.1、下载 Gradle
Gradle官网下载地址
左边下载安装的是bin版,仅包含二进制。如果你使用IDEA的话,它会推荐下载all版,包含源代码,这样IDEA就可以分析源代码,提供更加精确的gradle脚本支持。
解压到之后目录后即可。
2.2、环境变量配置
操作1:新增系统环境变量GRADLE_USER_HOME和GRADLE_HOME。
GRADLE_HOME
GRADLE_USER_HOME
操作2:在Path参数下新增%GRADLE_HOME%\bin。
操作3:gradle配置仓库
GRADLE_USER_HOME变量的值是本地仓库目录用来保存gradle下载的依赖包。
全局远程仓库配置:在解压的文件夹E:\gradle\gradle-6.2.1\init.d中新建文件init.gradle(下文有个介绍),填充以下内容
allprojects{
repositories {
maven{
allowInsecureProtocol =true
url= 'https://maven.aliyun.com/repository/public'
}
def REPOSITORY_URL = 'https://maven.aliyun.com/repository/public/'
//做一些国外不稳定的地址连接的替换
all {
ArtifactRepository repo ->
if (repo instanceof MavenArtifactRepository) {
def url = repo.url.toString()
if (url.startsWith('https://artifacts.elastic.co/maven')
||url.startsWith('https://repo1.maven.org/maven2')
|| url.startsWith('https://repo.maven.org/maven2')
|| url.startsWith('https://jcenter.bintray.com/')
||url.startsWith('https://repo.maven.apache.org/maven2')
) {
project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
remove repo
}
}
}
}
}
项目级别远程仓库配置:在每个gradle构建的项目中 的build.gradle文件中新增配置
repositories {
maven {
url 'http://maven.aliyun.com/nexus/content/groups/public/'
}
mavenCentral()
}
2.3、检查安装配置是否成功
打开命令指示符窗口,执行gradle -version。有一些输出。
Gradle user home : 就是环境变量中配置的 GRADLE_USER_HOME 地址
init.gradle文件在build开始之前执行,所以你可以在这个文件配置一些你想预先加载的操作,例如配置build日志输出、配置你的机器信息,比如jdk安装目录,配置在build时的账户鉴权信息(比如仓库或者数据库的认证信息)等等
启用init.gradle文件的方法:
1、在命令行指定文件,例如:gradle –init-script yourdir/init.gradle -q taskName你可以多次输入此命令来指定多个init文件。
2、把以.gradle文件放到USER_HOME/.gradle/目录下。例如init.gradle文件。
3、把以.gradle结尾的文件放到USER_HOME/.gradle/init.d/目录下。例如init.gradle文件。
4、把以.gradle结尾的文件放到GRADLE_HOME/init.d/目录下。例如init.gradle文件。
如果存在上面的4种方式的2种以上,gradle会按上面的1-4序号依次执行这些文件,如果给定目录下存在多个init脚本(.gradle文件),会按拼音a-z顺序执行。
gradle 项目默认目录和 maven 项目目录结构一致,都是基于约定大于配置(Convention Over Configuration),其完整的项目目录结构如下:
1、只有war工程才有webapp目录,对于普通的jar工程并没有webapp目录。
2、gradlelew 与 gradle.bat 执行的指定wrapper版本中的gradle指定,不是本地安装的gradle指令。
Gradle常用指令 | 作用 |
---|---|
gradle clean | 清空build目录 |
gradle classed | 编译业务代码和配置文件 |
gradle test | 编译测试代码,生成测试报告 |
gradle buid | 构建项目 |
gradle build -x test | 跳过测试构建 |
注意:gradle 的指令要在含有build.gradle的目录执行。
5.1、查看项目的任务依赖
要查看项目的依赖关系图,我们可以运行以下命令:
$ gradle dependencies
......省略部分输出.......
kaptTestRelease
\--- org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.2.51
+--- org.jetbrains.kotlin:kotlin-stdlib:1.2.51
| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.2.51
| \--- org.jetbrains:annotations:13.0
\--- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.2.51
+--- org.jetbrains.kotlin:kotlin-stdlib:1.2.51 (*)
\--- org.jetbrains.kotlin:kotlin-script-runtime:1.2.51
lintChecks - Configuration to apply external lint check jar
No dependencies
......省略部分输出.......
Tips:上面我们运行的命令输出的是整个项目的依赖,有时候我们只需要查查看当前 module 的依赖,那么我们怎么查查看呢?如下,我们输入gradle [module_name]:dependencies,例如我们想要查看 app 模块的依赖,我们可以执行如下命令:
//查看APP模块的依赖
$ gradle app:dependencies
5.2、排除某些任务
前面我么讲了 Gradle 的任务,我们可以用-x选项去排除一个任务。我们在build.gradle中定义的task mTest,我们如果想要跳过mTest,可以用以下的命令:
//buid.gradle中定义的Task,mTest
task mTest{
doLast{
println "这是测试Task"
}
}
//在控制台执行命令排除
$ gradle clean build -x mTest
5.3、查看 Gradle 的 Task
我们在开发过程中有时候难免会要查看 Gradle 构建有哪些任务,那么我们就可以使用下面的命令来查看:
$ gradle task
> Task :tasks
------------------------------------------------------------
Tasks runnable from root project
------------------------------------------------------------
Android tasks
-------------
androidDependencies - Displays the Android dependencies of the project.
signingReport - Displays the signing info for the base and test modules
sourceSets - Prints out all the source sets defined in this project.
Build tasks
-----------
assemble - Assemble main outputs for all the variants.
assembleAndroidTest - Assembles all the Test applications.
build - Assembles and tests this project.
.........省略部分任务..............
Build Setup tasks
-----------------
init - Initializes a new Gradle build.
wrapper - Generates Gradle wrapper files.
Cleanup tasks
-------------
lintFix - Runs lint on all variants and applies any safe suggestions to the source code.
.........省略部分任务..............
我们可以看到这个命令执行后会输出输出各种任务。
Tips: 我们看到这个很多,其实该命令输出的不是所有的命令,要查看项目构建的所有命令,我们需要执行的时候 后面加上 --all如下:
$ gradle task -all