gradle杂述
Posted 小白懂编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gradle杂述相关的知识,希望对你有一定的参考价值。
gradle就是groovy
groovy是一种运行在jvm上的与Java语法兼容的动态语言,语法简洁,非常适合作为脚本语言。大家可自行去了解下,对于Java码农而言,几乎无学习曲线。
请注意:gradle的构建配置文件build.gradle中的内容实际上都是groovy代码
Project
在gradle中,一个构建的项都是一个project(项目)。在多模块的Java项目中,每个模块都是一个子项目。
每个build.gradle文件实际上都会对应到一个project实例。启动gradle构建时,gradle会根据该次构建使用的build.gradle文件创建一个类型为org.gradle.api.Project的实例,名称为project,并隐式将此实例暴露给build.gradle,使得在build.gradle文件中可以直接访问该project实例中的属性和方法。
org.gradle.api.Project中定义了很多方法,如:
void apply(Map<String, ?> var1);void repositories(Closure var1);void dependencies(Closure var1);
在build.gradle中对应我们常见的:
//应用插件apply plugin: 'java' //groovy语法调用project的apply方法,传入一个map参数//定义依赖的类库从哪里获取repositories { //groovy语法调用project的repositories 方法,传入一个闭包参数
mavenCentral() //指定从maven中央仓库}//定义项目的依赖dependencies { //groovy语法调用project的dependencies 方法,传入一个闭包参数
compile 'org.codehaus.groovy:groovy-all:2.3.11'
testCompile group: 'junit', name: 'junit', version: '4.11'}
依赖
在Gradle中,依赖都被会分配到某一个具体的configuration中。Configuration代表着一个或多个构件及构件所需依赖的一个分组。
Java插件已经预定义了一些configuration,比如,compile,runtime,testCompile,testRuntime等。
compile 放在这个configuration下的依赖是在编译产品代码时所使用的,但它作为一个分组,包含产品代码和编译所需的依赖。
runtime 产品代码在运行时需要的依赖,默认,也会包含compile中的依赖。
testCompile 编译测试代码时所需要的依赖,默认,被编译的产品代码和产品代码需要的编译依赖也属于该分组。
testRuntime 运行测试时需要的依赖。默认,包含compile,runtime和testCompile的分组的构建和依赖。
使用过Maven的都应该知道分组的含义,这里讲解给不明白的同学,依赖之所以要分组,是因为,每个阶段对依赖的需要不一样,最明显的是产品代码和测试代码,比如junit在产品代码中就不需要。
Task
任务,用来处理构建逻辑,对应org.gradle.api.Task,你可以在task中写任何java/groovy代码。在project中调用task方法可以创建task;可以创建多个task。
task print{ //任务配置代码,在构建的配置阶段执行
def a=1
System.out.println("task config,"+a) //任务的动作代码,在执行task时执行
doFirst{ println("first")
}
doLast { println("last")
}
}
上面的脚本调用了project的task方法,创建了一个名称为print的task,每个task的代码分为配置部分和动作部分,所有task的配置代码,在构建的配置阶段执行,任务的动作代码写在doFirst或doLast中,在执行task时执行。
执行task print,可以看到如下输出:
task config,1:printfirstlast
buildScript配置块
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "net.saliman:gradle-cobertura-plugin:2.2.2"
}
}
这样子很容易让人奇怪,为什么repositories要声明两次哪?buildscript代码块中的声明与下半部分声明有什么不同?
类似的,其他配置块实际上都是groovy脚本,都能找到gradle对应的对象,明白了这点,结合gradle的Api很多gradle的配置就能看懂了
@不迷失|知识改善生活
专注技术研究与视频教学,分享有价值的技术与经验,关注程序员的发展!
技术博客:http://bumishi.cn
技术交流群:245130488
@不迷失教学视频
腾讯课堂:http://bumishi.ke.qq.com
百度课堂:http://chuanke.com/s3377987.html
推荐阅读
以上是关于gradle杂述的主要内容,如果未能解决你的问题,请参考以下文章
如何使用模块化代码片段中的LeakCanary检测内存泄漏?