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

@不迷失教学视频

gradle杂述


腾讯课堂:http://bumishi.ke.qq.com


百度课堂:http://chuanke.com/s3377987.html






 


推荐阅读


 






















以上是关于gradle杂述的主要内容,如果未能解决你的问题,请参考以下文章

Gradle 引入本地定制 jar 包

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

如何添加jcenter仓库 gradle依赖

如何防止Android studio格式化build.gradle

谷歌地图不显示在片段中

Gradle 导出属性不适用于 Spring 中的 gradle bootRun