听说Gradle插件有三种,不过我只用过一种,哈哈哈~

创建Gradle Module

file -> new Module -> Android Library,输入库名,点击Next

删除无用文件

保留src/main和build.gradle,其他都删除

新建入口文件

src/main下新建groovy\com\blacktoast\stydy\gradle\StudyPlugin.groovy

配置build.gradle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
apply plugin: 'groovy'  // 指定groovy插件
apply plugin: 'maven' // 指定maven插件

// 配置插件信息
group = 'com.blacktoast.study.gradle'
version = '1.0.0'

// 依赖库配置
dependencies {
// gradle sdk依赖
compile gradleApi()
// groovy sdk依赖
compile localGroovy()
}

// 仓库配置
repositories {
mavenCentral()
}

// 上传maven仓库任务配置
uploadArchives {
repositories {
mavenDeployer {
// 也可以在这边配置插件信息
// pom.groupId = 'com.blacktoast.study.gradle'
// pom.artifactId = 'studygradle'
// pom.version = '1.0.0'

// 上传到../repo仓库,即本地仓库repo
repository(url: uri('../repo'))
}
}
}

编写StudyPlugin.groovy文件

先同步下,保证两个sdk(gradle sdk、groovy sdk)已经导入,然后编写StudyPlugin.groovy文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.blacktoast.study.gradle

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

public class StudyPlugin implements Plugin<Project> {

@Override
void apply(Project project) {
// 新建task
def studyTask = project.task("study")

studyTask << {
println "Welcome to Gradle's World."
}

// 设置task对应的group
studyTask.group = "study"
}
}

新建properties文件

在src/main下新建resources\META-INF\gradle-plugins\plugin.study.properties,其中plugin.study为插件名,插件名可以自定义。在其中添加以下代码,指定插件入口文件

1
implementation-class=com.blacktoast.study.gradle.StudyPlugin

上传插件

gradle中存在gradlestudy -> Tasks -> upload -> uploadArchivs(由于在build.gradle文件中配置的),点击这个task执行上传操作

使用自定义gradle插件

在项目的build.gradle中添加配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
...

buildscript {
repositories {
maven {
// 指定本地仓库路径
url uri('repo')
}
...
}

...

dependencies {
...
// com.blacktoast.study.gradle为groupId
// gradlestudy为artifactId
// 1.0.0为version
// 对应插件工程中build.gradle中配置的插件信息
classpath "com.blacktoast.study.gradle:gradlestudy:1.0.0"
}
}

...

allprojects {
repositories {
maven {
// 指定本地仓库路径
url uri('repo')
}
}
}

...

module中使用插件,plugin.study为properties文件对应的插件名

1
apply plugin: 'plugin.study'


# gradle,groovy  

tocToc: