gradle 自定义plugin基本方式

1. 实现的几种方式

1. 直接在 app 的gradle文件中编写
    只有当前module可用,可用于本地调试
2. buildSrc工程
    只有当前工程可用,重复使用,不可上传
3. 独立module
    要配合上传到本地或者远端仓库使用

2. 如何实现

2.1 直接使用

好处: 使用简单,配置简单
缺点: 只能在当前module使用,局限性大
实现方式: 
1. 在APP的build.gradle文件中定义plugin
1
2
3
4
5
6
7
apply plugin: MyPlugin

class MyPlugin implements Plugin<Project> {
void apply(Project project) {
println "hello this my plugin in module "
}
}
build当前工程,执行 ./gradlew build 即可看到输入 

2.2 buildSrc方式

1. 新建 java module 名字 为 buildSrc
2. 配置gradle文件
1
2
3
4
5
6
7
8
apply plugin: 'java-library'
apply plugin: 'groovy'

dependencies {
compile gradleApi()
compile localGroovy()

}
3. 编写plugin实现
1
2
3
4
5
6
7
8
9
10
11
package fun.wanke.plugin


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

class MyPlugin implements Plugin<Project> {
void apply(Project project) {
println "hello this my plugin in src module "
}
}
4. 在APP中引用完整的类名
    apply plugin: fun.wanke.plugin.MyPlugin
5. 执行./gradlew build 验证即可看到输出
    

2.3 独立module

2.3.1 建立插件工程

独立的module是配置最为复杂,使用灵活的一种实现方式

1. 创建java工程
2. gradle 配置
1
2
3
4
5
6
7
8
9
apply plugin: 'java-library'
apply plugin: 'groovy'

dependencies {

compile gradleApi()
compile localGroovy()

}
3. 创建插件类
1
2
3
4
5
6
7
8
9
10
package fun.wanke.plugin

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

class MyPlugin implements Plugin<Project> {
void apply(Project project) {
println "hello this my plugin in standalone "
}
}
4. 创建资源文件,按照以下目录进行
    - module
        - src
            - main
                - resources
                    - META-INF
                        - gradle-plugin
    在main下创建目录,最后我们在 gradle-plugin 文件夹下创建属性文件
    fun.wanke.plugin.properties 文件名规则要按照我们plugin所在的包名命名 
    implementation-class=fun.wanke.plugin.MyPlugin 文件中写入以上信息。value 为 我们的自定义插件完整命名

2.3.2 上传插件到本地仓库

在我们的工程的gradle文件中追加一下信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apply plugin: 'maven'

repositories {
jcenter()
mavenCentral()
}

group = 'fun.wanke.plugin'
version = '0.7'

uploadArchives {
repositories {
mavenDeployer {
repository(url: uri("../repository"))
}
}
}

我们配置了maven仓库,并且新建了一个uploadtask,把maven仓库配置为工程所在的根目录
我们同步gradle会在gradle看板中找到一个 uploadArchive的task
执行此task,会在工程根目录生成一个respository文件夹

2.3.3 使用本地仓库的插件

工程根目录配置gradle文件,添加classpath如下

1. classpath 'fun.wanke.plugin:myPlugin:0.7' 组织结构为 [packagename:moduleName:version]
2. respositories 添加maven仓库地址
1
2
3
maven {// 添加Maven的本地依赖
url uri('./repository')
}
3. app 的gradle 文件中应用
    apply plugin: 'fun.wanke.plugin'
4. clean and make project

代码已托管至 Github ,点击获取