gradle学习-自定义gradle插件

公司项目中有用到gradle插件,网上很多都讲的不是很好,现在总结一下自定义一个gradle插件的步骤:

1、新建一个Android project

2、新建一个Android lib module,

3、并把main文件夹下的所有资源文件(res文件夹)、AndroidMainfest.xml文件、java文件全部删除。只保留gradle文件和src/main目录。

image.png

4、在main文件夹下新建一个groovy文件夹,接着在新建一个LinkPlugin.groovy文件,和java一样,这个groovy文件的包名为com.link.plugin

image.png

5、让LinkPlugin视线Plugin接口,并实现apply方法,apply方法中其实就是我们要写的插件的逻辑。

package com.link.plugin

import org.gradle.api.Plugin
import org.gradle.api.Project

public class LinkPlugin implements Plugin {

  void apply(Project project) {
    System.out.println("========================");
    System.out.println("hello gradle plugin!");
    System.out.println("========================");
  }
}

6、新建好了插件,那么我们怎么才能找到插件呢?在main文件夹下,新建一个resources/META-INF/gradle-plugins文件夹,并在该文件夹下新建一个com.link.plugin.properties文件里添加如下代码:

implementation-class=com.link.plugin.LinkPlugin

implementation-class后面跟的是前面我们定义插件的全类名。

properties文件夹的位置如下:

image.png

注意:properties文件的名称是插件的id,当我们使用apply关键字应用插件的时候会使用到

(7) 因为我们要用到groovy以及后面打包要用到maven,所以在我们自定义的Module下的build.gradle需要添加如下代码:

apply plugin: 'groovy'
apply plugin: 'maven'

dependencies {
    //gradle sdk
    compile gradleApi()
    //groovy sdk
    compile localGroovy()
}

repositories {
    mavenCentral()
}


打包到本地Maven

前面我们已经自定义好了插件,接下来就是要打包到Maven库里面去了,你可以选择打包到本地,或者是远程服务器中。在我们自定义Module目录下的build.gradle添加如下代码:

apply plugin: 'groovy'
apply plugin: 'maven'

dependencies {
  //gradle sdk
  compile gradleApi()
  //groovy sdk
  compile localGroovy()
}

repositories {
  mavenCentral()
}

group='com.link.plugin'
version='1.0.0'

uploadArchives {
  repositories {
    mavenDeployer {
      //提交到远程服务器:
      // repository(url: "http://www.xxx.com/repos") {
      //    authentication(userName: "admin", password: "admin")
      // }
      //本地的Maven地址设置为D:/repos
      repository(url: uri('C:/repos'))
    }
  }
}

其中,group和version后面会用到,我们后面再讲。虽然我们已经定义好了打包地址以及打包相关配置,但是还需要我们让这个打包task执行。点击AndroidStudio右侧的gradle工具,如下图所示:

image.png

可以看到有uploadArchives这个Task,双击uploadArchives就会执行打包上传啦!执行完成后,去我们的Maven本地仓库查看一下:

image.png

我们打开maven-metadata.xml文件看看

image.png

里面可以看出,插件的groupId为com.link.plugin,artifactId为plugin,默认是module的名称,version是1.0.0

使用插件

接下来就是使用自定义的插件了,一般就是在app这个模块中使用自定义插件,因此在app这个Module的build.gradle文件中,需要指定本地Maven地址、自定义插件的名称以及依赖包名。简而言之,就是在app这个Module的build.gradle文件中后面附加如下代码:

buildscript {
    repositories {
        maven {//本地Maven仓库地址
            url uri('C:/repos')
        }
    }
    dependencies {
        //格式为-->groupId:artifactId:version
        classpath 'com.link.plugin:plugin:1.0.0'
    }
}
//com.link.plugin为resources/META-INF/gradle-plugins
//下的properties文件名称
apply plugin: 'com.link.plugin'

好啦,接下来就是看看效果啦!先clean project(很重要!),然后再make project.从messages窗口打印如下信息:

image.png

你可能感兴趣的:(gradle学习-自定义gradle插件)