gradle:自定义任务task

1:建立一个AS工程,建立目录结构如图

gradle:自定义任务task

 2:在buildSrc文件夹下面,建立两个.groovy文件,分别为ProjectVersion.groovy  和 ReleaseVersionTask.groovy

其中ReleaseVersionTask.groovy代码为:

package com.groovytest;
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction

class ReleaseVersionTask extends DefaultTask{
    @Input Boolean release
    @OutputFile File destFile

    ReleaseVersionTask(){
        group=‘versioning‘
        description=‘Makes project a release version.‘
    }

    @TaskAction
    void start(){
        project.version.release=true;
        ant.propertyfile(file:destFile){
            entry(key:‘release‘,type:‘string‘,operation:‘=‘,value: ‘true‘)
        }
    }
}

ProjectVersion.groovy代码为:

package com.groovytest;

class ProjectVersion{
    Integer major
    Integer minor
    Boolean release

    ProjectVersion(Integer major, Integer minor){
        this.major=major
        this.minor=minor
        this.release=Boolean.FALSE
    }


    ProjectVersion(Integer major, Integer minor, Boolean release){
        this.major=major
        this.minor=minor
        this.release=release
    }

    @Override
    String toString(){
        "$major.$minor${release?‘‘: ‘-SNAPSHOT‘}"
    }

}

 3: 在buildSrc下面建立一个build.gradle文件

gradle:自定义任务task

 build.gradle内容为:

apply plugin: ‘groovy‘
apply plugin: ‘maven‘

version = ‘1.0‘
group = ‘com.groovytest‘
archivesBaseName = ‘releaseVersionTask‘

repositories {
    mavenCentral()
}

dependencies {
    // 编译的时候我们需要使用Gradle中的API
    compile gradleApi()
}

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file:D:\\Android_Develop\\gradle_project\\local_maven")
        }
    }
}

其中"file:D:\\Android_Develop\\gradle_project\\local_maven"为你自定义的本地仓库地址:

4:根目录下面的build.gradle内容如下:

buildscript {

    repositories {
        google()
        jcenter()

    }
    dependencies {
        classpath ‘com.android.tools.build:gradle:3.6.3‘

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

5:setting.gradle内容如下:

gradle:自定义任务task

6:在根目录下面执行gradle uploadArchives

gradle:自定义任务task

7:查看本地文件夹下面有了相应的jar文件

gradle:自定义任务task

 8:在其他工程中使用这个Jar文件,AS新建一个工程,可以选择空项目,目录配置如下:

gradle:自定义任务task

 9:在根目录下面的build.gradle如下:

gradle:自定义任务task

 build.gradle内的代码如下:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

    repositories {
        google()
        jcenter()
        /*
        使用本地仓库
        */
        maven {
            url ‘file:D:\\Android_Develop\\gradle_project\\local_maven‘
        }

    }
    dependencies {
        classpath ‘com.android.tools.build:gradle:3.6.3‘
        //依赖本地jar
        classpath ‘com.groovytest:releaseVersionTask:1.0‘
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url ‘file://D:\\Android_Develop\\gradle_project\\local_maven‘
        }


    }


}
task clean(type: Delete) {
    delete rootProject.buildDir
}

10:现在可以在build.gradle里面使用了,import com.groovytest;是可以找的到的,如图,如果配置不对是找不到的。

gradle:自定义任务task

11:如果我们想在app下面的build.gradle 以及.java里面使用,那我们要配置app下面的build.gradle

gradle:自定义任务task

 12:首先我们配置app下面的 build.gradle,最关键的就是设置dependencies:如图

gradle:自定义任务task

 13:然后我们就可以在build.gradle 以及test.java下面使用了

gradle:自定义任务task

 gradle:自定义任务task

注意:一开始,我想着在根目录下面的build.gradle来生成jar,也就是说一开始没有下图的1文件,只有2文件,并且2文件里面设置upload代码,这个时候编译也能通过,但是呢生成的.jar是不能用的,如图

只有1kb,也就是没有生成成功,并且其他项目也无法导入。

gradle:自定义任务task

相关推荐