Kotlin版本實(shí)現(xiàn)Gradle插件
本文鏈接:https://blog.csdn.net/feather_wch/article/details/131746478文章來源地址http://www.zghlxwxcb.cn/news/detail-572276.html
- 創(chuàng)建一個(gè)Gradle項(xiàng)目,并選擇Kotlin/JVM作為項(xiàng)目SDK。假設(shè)項(xiàng)目的名稱為hello-plugin。
- 在項(xiàng)目中創(chuàng)建一個(gè)新的源集,比如plugin,用于存放插件的源代碼和資源。在src目錄下創(chuàng)建一個(gè)plugin目錄,并在其中創(chuàng)建一個(gè)kotlin目錄和一個(gè)resources目錄。
- 在plugin源集中創(chuàng)建一個(gè)實(shí)現(xiàn)了Plugin接口的類,比如HelloPlugin。在src/plugin/kotlin/com/example目錄下創(chuàng)建一個(gè)HelloPlugin.kt文件,內(nèi)容如下:
package com.example
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.Exec
// 實(shí)現(xiàn)Plugin接口
class HelloPlugin : Plugin<Project> {
// 重寫apply方法
override fun apply(project: Project) {
// 在項(xiàng)目中添加一個(gè)hello任務(wù),用于打印一句問候語
project.tasks.register("hello", Exec::class.java) {
it.commandLine("echo", "Hello from plugin!")
}
}
}
- 在plugin源集中創(chuàng)建一個(gè)resources/META-INF/gradle-plugins目錄,用于存放插件的屬性文件。在該目錄下創(chuàng)建一個(gè)hello.properties文件,內(nèi)容如下:
# 指定插件類的全限定名
implementation-class=com.example.HelloPlugin
- 在項(xiàng)目根目錄下創(chuàng)建一個(gè)settings.gradle.kts文件,用于配置項(xiàng)目名稱和版本號(hào)。內(nèi)容如下:
// 配置項(xiàng)目名稱
rootProject.name = "hello-plugin"
// 配置項(xiàng)目版本號(hào)
rootProject.version = "1.0.0"
- 在項(xiàng)目根目錄下創(chuàng)建一個(gè)build.gradle.kts文件,用于配置項(xiàng)目的構(gòu)建邏輯。在這里,你需要添加一些依賴項(xiàng),比如gradleApi()和kotlin(“stdlib”),以及一些任務(wù),比如jar和publishToMavenLocal。內(nèi)容如下:
plugins {
// 應(yīng)用java插件
java
// 應(yīng)用kotlin插件
kotlin("jvm") version "1.6.0"
// 應(yīng)用maven-publish插件
`maven-publish`
}
// 配置源集
sourceSets {
// 獲取plugin源集
val plugin by getting {
// 設(shè)置編譯輸出目錄
output.setClassesDirs(files("$buildDir/classes/plugin"))
// 設(shè)置資源輸出目錄
output.setResourcesDir("$buildDir/resources/plugin")
// 設(shè)置編譯輸入目錄
java.srcDir("src/plugin/kotlin")
// 設(shè)置資源輸入目錄
resources.srcDir("src/plugin/resources")
}
}
// 配置依賴項(xiàng)
dependencies {
// 添加gradleApi依賴項(xiàng),用于訪問Gradle API
implementation(gradleApi())
// 添加kotlin標(biāo)準(zhǔn)庫(kù)依賴項(xiàng),用于編譯Kotlin代碼
implementation(kotlin("stdlib"))
}
// 配置jar任務(wù),用于打包插件類和資源為jar文件
tasks.jar {
// 設(shè)置jar文件名為項(xiàng)目名稱-版本號(hào).jar,比如hello-plugin-1.0.0.jar
archiveFileName.set("${project.name}-${project.version}.jar")
// 設(shè)置jar文件所在目錄為build/libs目錄
destinationDirectory.set(file("$buildDir/libs"))
// 從plugin源集中獲取類和資源,并添加到j(luò)ar文件中
from(sourceSets["plugin"].output)
}
// 配置publishing擴(kuò)展,用于發(fā)布插件到Maven倉(cāng)庫(kù)
publishing {
// 配置發(fā)布到本地Maven倉(cāng)庫(kù)的方式
repositories {
mavenLocal()
}
// 配置發(fā)布的內(nèi)容
publications {
// 創(chuàng)建一個(gè)MavenPublication類型的publication,并命名為pluginJar
create<MavenPublication>("pluginJar") {
// 設(shè)置groupId為com.example
groupId = "com.example"
// 設(shè)置artifactId為項(xiàng)目名稱
artifactId = project.name
// 設(shè)置version為項(xiàng)目版本號(hào)
version = project.version.toString()
// 設(shè)置發(fā)布的artifact為jar任務(wù)生成的jar文件
artifact(tasks.jar)
}
}
}
- 在IDE中運(yùn)行publishToMavenLocal任務(wù),將插件打包成jar文件,并發(fā)布到本地Maven倉(cāng)庫(kù)。你可以在~/.m2/repository/com/example/hello-plugin/1.0.0目錄下找到發(fā)布的文件,包括hello-plugin-1.0.0.jar和hello-plugin-1.0.0.pom。
- 在另一個(gè)Gradle項(xiàng)目中,你可以使用plugins塊來應(yīng)用你開發(fā)的插件,比如plugins { id(“hello”) version “1.0.0” }。這樣就可以使用插件提供的功能了,比如運(yùn)行hello任務(wù),打印一句問候語。
文章來源:http://www.zghlxwxcb.cn/news/detail-572276.html
到了這里,關(guān)于Kotlin版本實(shí)現(xiàn)Gradle插件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!