gradle自定义插件与上传本地仓库

gradle自定义插件与上传本地仓库

DEMO地址:https://github.com/zhaopingfu/listener20

1、使用特殊目录buildSrc目录(工程根目录下创建)

buildSrc这个目录是一个特殊的目录,在这个目录里groovy自动帮我们引入了groovy和java api

如果工程中存在buildSrc,在执行编译任务的时候,首先执行的是buildSrc的一系列的clean,编译,组装
也就是说在编译之前就会之前

无论我们有多少模块,在执行任何任务的时候,都会执行buildSrc

在buildSrc中编写的,能够作用在所有的子模块中
  • 首先在android项目根目录中创建buildSrc文件夹

  • 创建src/main/groovy/Plugin1.groovy

    import org.gradle.api.Plugin
    import org.gradle.api.Project
    
    class Plugin1 implements Plugin {
    
        @Override
        void apply(Project project) {
            println 'plugin1'
        }
    }   
    
  • 之后在app下的build.gradle中直接引入

    apply plugin: Plugin1
    

2、直接在build.gradle中编写插件或者在app下直接写插件文件,然后引入

  • 可以直接在app下的build.gradle中写

    class A implements Plugin{
    
        @Override
        void apply(Project target) {
    
        }
    }
    
  • 也可以在其他文件中写,比如app目录下新建一个文件:plugin.gradle里面写

    import org.gradle.api.Plugin
    import org.gradle.api.Project
    
    class Plugin2 implements Plugin {
    
        @Override
        void apply(Project project) {
            println 'plugin2'
        }
    }
    
  • 之后在app下的build.gradle中引入:

    apply from:'plugin.gradle'  
    

3、本地仓库

本地仓库路径:C:\Users\Administrator.m2\repository

可以先在AndroidStudio中创建一个module(java library)

  • 1、首先在build.gradle中引入依赖

    apply plugin: 'java'
    apply plugin: 'groovy'
    
    dependencies {
        compile gradleApi()
        compile localGroovy()
        compile fileTree(dir: 'libs', include: ['*.jar'])
    }
    
    sourceCompatibility = "1.7"
    targetCompatibility = "1.7"
    
    //classpath 'com.pf.plugin:plugin:1.0.0'
    //group是第一段
    //version是第三段
    group 'com.pf.plugin'
    version '1.0.0'
    
    apply plugin: 'maven-publish'
    
    publishing {
        publications {
            plugin(MavenPublication) {
                from components.java
                //classpath 'com.pf.plugin:plugin:1.0.0'
                //下面这个指定的就是第二段的名字,如果不设置,默认就是程序名
                //如果不指定,默认就是工程名
                artifactId 'plugin'
            }
        }
    }
    
  • 2、在main目录下创建groovy文件夹,在里面创建com.pf.plugin.Plugin3.groovy

    package com.pf.plugin
    
    import org.gradle.api.Plugin
    import org.gradle.api.Project
    
    class Plugin3 implements Plugin {
    
        @Override
        void apply(Project project) {
            println 'plugin3======='
        }
    }
    
  • 3、 在main目录下创建resources文件夹,在里面创建META-INF/gradle-plugins/com.pf.plugin.properties
    里面就写一句话

        implementation-class=com.pf.plugin.Plugin3
    
    注意:com.pf.plugin.properties这个名字,就是将来apply的那个名字
    
        apply plugin: 'com.pf.plugin'就是这个名字
    
  • 4、上传到本地仓库
    先将项目同步一下,然后在右边的gradle选项中:plugin:Tasks:publishing,里面有四个任务,其中有个叫做publishPluginPublicationToMavenLocal,这个就是上传到本地仓库,双击执行任务,执行成功后会在本地看到

    本地仓库路径:C:\Users\Administrator\.m2\repository
    
    里面会看到刚才上传的插件
    
  • 5、项目中引入插件
    在项目的app模块下的build.gradle中加入引用

        apply plugin: 'com.pf.plugin'
        buildscript {
            repositories {
                mavenLocal()
            }
            dependencies {
                classpath 'com.pf.plugin:plugin:1.0.0'
            }
        }
    
    在terminal中执行
        gradlew assembleDebug
    
    在日志中会看到 输出了"plugin3=======",说明插件引用成功了
    

总结

apply plugin: 'com.pftest.plugin'这个名字是resources下的com.pftest.plugin.properties这个名字

buildscript {
    repositories {
        mavenLocal()
    }
    dependencies {
        classpath 'com.pftest.plugin:plugin21:1.0.0'

        这里的三段内容是
        group 'com.pftest.plugin'
        artifactId 'plugin21'
        version '1.0.0'
    }
}

DEMO地址:https://github.com/zhaopingfu/listener20

你可能感兴趣的:(android,groovy)