如何從 buildSrc 插件應用 Kotlin 插件?
我有一個包含以下內容的 build.gradle.kts 檔案的 Kotlin 專案:
plugins {
application
kotlin("jvm")
kotlin("plugin.serialization")
}
我想在 buildSrc 中創建一個自定義插件:
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper
class MyPlugin: Plugin<Project> {
override fun apply(project: Project) {
project.pluginManager.apply("org.gradle.application") //This works
project.pluginManager.apply("?kotlin(jvm)?") //<-- Here is my doubt
project.pluginManager.apply("?kotlin(plugin.serialization)?") //<-- Here is my doubt
}
}
并像這樣使用它:
plugins {
id("com.example.myplugin")
}
uj5u.com熱心網友回復:
要從 buildSrc 插件中應用 Gradle 插件,您需要做兩件事
將插件添加為依賴項
buildSrc/build.gradle.kts插件必須使用Maven 坐標而不是插件 ID 作為依賴項添加。插件的 Maven 坐標可以在 Gradle 插件門戶中找到。
- https://plugins.gradle.org/plugin/org.jetbrains.kotlin.jvm
- https://plugins.gradle.org/plugin/org.jetbrains.kotlin.plugin.serialization
// buildSrc/build.gradle.kts plugins { `kotlin-dsl` } dependencies { // the Maven coordinates of the Kotlin Gradle and Serialization plugins implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20") implementation("org.jetbrains.kotlin:kotlin-serialization:1.7.20") }使用類或插件 ID 應用插件。
(請注意,這
kotlin("jvm")是一個隱藏實際 Gradle 插件 ID 的輔助函式,即org.jetbrains.kotlin.jvm)class MyPlugin: Plugin<Project> { override fun apply(project: Project) { project.pluginManager.apply("org.jetbrains.kotlin.jvm") project.pluginManager.apply("org.jetbrains.kotlin.plugin.serialization") // the plugin class for the Kotlin JVM & Serialization plugins project.plugins.apply(org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper::class) project.plugins.apply(org.jetbrains.kotlinx.serialization.gradle.SerializationGradleSubplugin::class) } }(找到插件類并不容易 - 我不得不在 jar 中四處尋找插件標記工件,例如
kotlin-serialization-1.7.20-gradle71.jar!/META-INF/gradle-plugins/org.jetbrains.kotlin.plugin.serialization.properties)
您可能還想使用預編譯的腳本插件。它們允許撰寫更類似于標準build.gradle.kts檔案的 buildSrc 腳本插件,因此您可以在 plugins 塊中應用插件。
// buildSrc/src/main/kotlin/conventions/kotlin-jvm.gradle.kts
plugins {
kotlin("jvm")
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/521305.html
標籤:毕业典礼毕业插件gradle-kotlin-dslkotlin-gradle-pluginbuildsrc
