首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用buildSrc中的Kotlin插件

使用buildSrc中的Kotlin插件
EN

Stack Overflow用户
提问于 2022-10-24 07:37:11
回答 1查看 59关注 0票数 0

如何应用buildSrc插件中的Kotlin插件?

我有一个包含以下内容的build.gradle.kts文件的Kotlin项目:

代码语言:javascript
复制
plugins {
    application
    kotlin("jvm")
    kotlin("plugin.serialization")
}

我想在buildSrc中创建一个自定义插件:

代码语言:javascript
复制
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
    }
}

像这样使用它:

代码语言:javascript
复制
plugins {
    id("com.example.myplugin")
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-24 20:25:33

要从buildSrc插件中应用Gradle插件,您需要做两件事

  1. buildSrc/build.gradle.kts中将插件添加为依赖项 插件必须使用Maven坐标而不是插件ID作为依赖项添加,插件的Maven坐标可以在Gradle插件门户中找到。
代码语言:javascript
复制
- [https://plugins.gradle.org/plugin/org.jetbrains.kotlin.jvm](https://plugins.gradle.org/plugin/org.jetbrains.kotlin.jvm)
- [https://plugins.gradle.org/plugin/org.jetbrains.kotlin.plugin.serialization](https://plugins.gradle.org/plugin/org.jetbrains.kotlin.plugin.serialization)

// buildSrc/build.gradle.kts插件{ kotlin-dsl }依赖项{ // Kotlin Gradle和序列化插件implementation("org.jetbrains.kotlin:kotlin-serialization:1.7.20") }的Maven坐标

  1. 应用插件,使用类或插件ID。 (注意,kotlin("jvm")一个辅助函数,它模糊了实际的Gradle插件ID,也就是org.jetbrains.kotlin.jvm) 类project.pluginManager.apply("org.jetbrains.kotlin.jvm"):Plugin {重写乐趣应用程序(项目:项目){ project.pluginManager.apply("org.jetbrains.kotlin.plugin.serialization") // Kotlin的插件类&序列化插件project.plugins.apply(org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper::class) project.plugins.apply(org.jetbrains.kotlinx.serialization.gradle.SerializationGradleSubplugin::class) } (要找到插件类并不容易--我不得不在罐子里挖来挖去找到插件标记伪像,例如kotlin-serialization-1.7.20-gradle71.jar!/META-INF/gradle-plugins/org.jetbrains.kotlin.plugin.serialization.properties)

您也可能希望使用预编译脚本插件。它们允许编写更类似于标准buildSrc文件的build.gradle.kts脚本插件,因此您可以在插件块中应用插件。

代码语言:javascript
复制
// buildSrc/src/main/kotlin/conventions/kotlin-jvm.gradle.kts

plugins {
  kotlin("jvm")
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74177878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档