创建gradle自定义脚本任务

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BING835687152/article/details/83274504

创建gradle自定义脚本任务

gradle的使用groovy脚本语言进行管理,除了基本的依赖管理和编译打包以及自动化测试之外,gradle还可以自定义脚本任务来帮助我们完成一些繁琐的重复性工作,比如使用idea创建完一个gradle项目之后是一个空项目,并没有src/main/java,src/main/resources等基本目录的,我们可以使用自定义脚本任务自动生成这些项目目录,而不需要手动创建。

buid.gradle文件

在build.gradle文件实际上是一个groovy脚本文件,以下是groovy语言的简介

Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以使用其他 Java 语言编写的库。

因此,在groovy脚本中,是可以执行java语言的,也可以使用groovy自己的特性。build.gradle中的apply, repositories, dependencies实际上就是使用groovy语言调用gradle提供的java类中的方法。
以下是一个最基本的build.gradle文件

group 'com.maxrocky.ice'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

构建脚本介绍

Gradle构建中比较重要的两个概念就是项目(Project)和任务(Task),每个构建必须包含一个项目,多个项目可以互相依赖,被依赖的项目中的任务先执行。比如A项目依赖B项目,B项目依赖C项目,那么执行顺序是C -> B -> A。

Project

对应org.gradle.api.Project类,当执行一个构建的时候,grade会实例化一个Project并通过project变量使其隐式可用。Project中比较重要的方法有apply, repositories, dependencies, task,前面三个比较常用,不多说,分别是用来声明构建脚本使用的插件,仓库地址以及项目依赖,最后一个task就是用来声明此项目中有哪些任务的,下面着重说一下task

Task

对应org.gradle.api.Task类,由任务动作和任务依赖组成,以下是Task中定义任务动作和任务依赖的比较重要的方法。

  • dependsOn

    定义当前任务依赖的任务,依赖的任务执行完后再执行当前任务

  • doFirst,doLast,<<

    定义在当前任务列表前或后执行的任务,<< 和 doLast效果一样

示例

定义一个任务创建gradle标准文件夹目录结构

任务执行前效果:
任务执行前

任务执行后效果:
任务执行后

代码示例:

group 'com.maxrocky.ice'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

def createDir = {//定义一个闭包方法创建文件夹
    path ->
        File file = new File(path);
        if(!file.exists()){
            file.mkdirs();
        }
}

task createJavaDir {//定义创建gradle文件夹目录的任务
    //定义需要创建的文件目录
    def paths = ['src/main/java','src/main/resources','src/test/java','src/test/resources'];
    doFirst {//第一个任务用doFirst和doLast都一样
        paths.forEach(createDir);//调用createDir方法创建目录
    }
}

定义另外一个任务与前一个任务建立依赖关系

任务执行前效果:
任务执行后

任务执行后效果:
任务执行后

代码示例:

group 'com.maxrocky.ice'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

def createDir = {//定义一个闭包方法创建文件夹
    path ->
        File file = new File(path);
        if(!file.exists()){
            file.mkdirs();
        }
}

task createJavaDir {//定义创建gradle文件夹目录的任务

    //定义需要创建的文件目录
    def paths = ['src/main/java','src/main/resources','src/test/java','src/test/resources'];
    doFirst {//第一个任务用doFirst和doLast都一样
        paths.forEach(createDir);//调用createDir方法创建目录
    }
}

task createWebDir {//定义创建web文件夹目录的任务
    dependsOn(createJavaDir)//定义依赖任务,执行当前任务前会先执行依赖任务创建gradle文件夹目录结构
    def paths = ['src/main/webapp','src/test/webapp'];
    doLast {
        paths.forEach(createDir)
    }
}

以上就是创建gradle自定义任务的基本知识,如有不对,请评论指正,谢谢!

展开阅读全文

没有更多推荐了,返回首页