插件 module
目录结构(java library)
- groovy 和 resources 等是固定目录
- zkt-plugin.properties 其中 zkt-plugin 是apply plugin时引用的名字
创建 Plugin
package com.zkt.plugin
import org.gradle.api.Action
import org.gradle.api.Plugin
import org.gradle.api.Project
class MyPlugin implements Plugin<Project> {
void apply(Project project) {
//创建extension
def obj = project.extensions.create("test111", MyExtension)
// 第一种
// project.task('zkt') {
// doLast {
// println "====== key1 : ${obj.key1} === key2 : ${obj.key2} ============="
// }
// }.setGroup('zktGroup')
//第二种
// 所有Project配置完成后,会回调project.afterEvaluate()
// 之所以在此回调中获取值,是因为build.gradle中对插件apply在前,extension配置在后,所以需要等配置之后才能获取到extension的赋值
project.afterEvaluate(new Action<Project>() {
@java.lang.Override
void execute(Project p) {
//创建task
project.getTasks().create("zkt", MyTask, obj.key1, obj.key2)
.setGroup('zktGroup')
}
})
}
}
声明 Task
package com.zkt.plugin
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
import javax.inject.Inject
class MyTask extends DefaultTask {
String key = ""
String key2 = ""
// 添加构造参数
@Inject
MyTask(String key, String key2) {
this.key = key
this.key2 = key2
}
// 添加要执行动作
@TaskAction
def onTaskMethod() {
println "====== key : $key === key2 : $key2 ============="
}
}
声明 Extension
package com.zkt.plugin
class MyExtension {
def key1
def key2
}
properties 配置
implementation-class = com.zkt.plugin.MyPlugin
build.gradle 配置
直接复制
plugins {
// 如果用了groovy语言开发,那需要加上此插件
id 'groovy'
//gradle7以下将插件上传至maven 仓库
// id 'maven'
//gradle7以后要用这个插件上传maven
id 'maven-publish'
id 'java-gradle-plugin'
}
dependencies {
// 不需要,id 'java-gradle-plugin'搞定
// implementation(gradleApi())
// implementation(localGroovy())
implementation 'com.android.tools.build:gradle:3.5.2' // 如果Android 编译相关,需依赖这个
}
repositories {
mavenCentral()
}
// uploadArchives 和 publications 是gradle 提供的两种发布机制
// uploadArchives 是基于 Upload 类型的任务,是原始的、与java插件配合使用的机制
// publications 是基于MavenPublication类型的任务,是新的、与 maven-publish 插件配合使用的机制
// uploadArchives 在 gradle7 中已经被移除,建议迁移到 maven-publish
//uploadArchives {
// repositories.mavenDeployer {
// repository(url: uri('../repo')) //upload时 根目录下会自动生成repo文件夹作为仓库
// pom.groupId = 'com.zkt.plugin'
// pom.artifactId = 'zktPlugin'
// pom.version = '1.0.0'
// }
//}
//***************** 新的方式,与uploadArchives的方式二选一 ************************
//配置发布本地 maven
publishing {
repositories {
maven { url uri("../repo") }
}
publications {
debug(MavenPublication) {
from components.java
groupId 'me.zkt.asm'
artifactId 'lib-asm'
version "1.0.0"
}
}
}
发布插件到本地maven
其他module中使用插件
根 build.gradle 中配置
buildscript {
repositories {
...
//引用本地声明的插件仓库
maven { url uri('/repo') }
}
dependencies {
...
//插件版本
classpath 'com.zkt.plugin:zktPlugin:1.0.0'
}
}
子module中引用并赋值extension
apply plugin: 'zkt-plugin'
//给Extension赋值
test111 {
key1 "hahahhahah"
key2 "hhhhhh"
}