创建Project
idea新建一个project叫做myplugin
语言选kotlin,编译系统选gradle,jdk选17,gradle dsl 选kotlin
这个工程的产物是一个 gradle plugin,同时它自己也依赖了这个plugin
settings.gradle.kt
rootProject.name = "myplugin"
pluginManagement {
repositories {
// kotlin("jvm"), `java-gradle-plugin`, `maven-publish` 等要用到
mavenCentral()
// 一会编译完成后会把插件发布到local并依赖
mavenLocal()
}
}
build.gradle.kt
plugins {
// kotlin支持
kotlin("jvm") version "1.8.21"
// gradle api 支持
`java-gradle-plugin`
// maven local 支持
`maven-publish`
// 自己编译出来的插件,首次编译成功后再打开
// id("org.example.greeting") version "1.1-SNAPSHOT"
}
// jar包名称和版本
group = "org.example"
version = "1.1-SNAPSHOT"
repositories {
mavenCentral()
}
gradlePlugin {
plugins {
// 插件id和主类,编译过程中这两个属性会以文件的形式记录到jar包的resource中
// 这样 gradle 能从jar包中找到主类并调用
create("simplePlugin") {
id = "org.example.greeting"
implementationClass = "GreetingPlugin"
}
}
}
主类
import org.gradle.api.Plugin
import org.gradle.api.Project
class GreetingPlugin : Plugin<Project> {
// 插件的核心就是一个 appy 方法
override fun apply(project: Project) {
project.task("hello") {
it.doLast {
println("Hello from the GreetingPlugin")
}
}
}
}
测试
执行 ./gradlew :publishToMavenLocal进行编译和本地发布
build.gradle.kt 中打开本工程依赖 “org.example.greeting”
PS F:\ws\myplugin> ./gradlew -q hello
Hello from the GreetingPlugin
参考
https://docs.gradle.org/current/userguide/custom_plugins.html
https://docs.gradle.org/current/userguide/publishing_maven.html