相关疑难解决方法(0)

为 Gradle 子项目配置 Kotlin 扩展

我正在为 JVM 设置一个基于 Kotlin 的多模块 Gradle 项目。由于根项目不包含任何代码,因此 Kotlin 插件只能应用于子项目。

build.gradle.kts(根项目)

plugins {
    kotlin("jvm") version "1.6.20" apply false
}

subprojects {
    apply(plugin = "kotlin")

    group = "com.example"

    repositories {
        mavenCentral()
    }

    dependencies {}

    kotlin {
        jvmToolchain {
            check(this is JavaToolchainSpec)
            languageVersion.set(JavaLanguageVersion.of(11))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

尝试设置工具链会导致构建在kotlin {...}扩展处失败:

Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: 
public fun DependencyHandler.kotlin(module: String, version: String? = ...): Any defined in org.gradle.kotlin.dsl
public fun PluginDependenciesSpec.kotlin(module: String): PluginDependencySpec defined …
Run Code Online (Sandbox Code Playgroud)

gradle kotlin gradle-kotlin-dsl gradle-multi-project-build kotlin-gradle-plugin

12
推荐指数
1
解决办法
8446
查看次数

使用 buildSrc 中的 Kotlin 插件

如何从 buildSrc 插件应用 Kotlin 插件?

\n

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

\n
plugins {\n    application\n    kotlin("jvm")\n    kotlin("plugin.serialization")\n}\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
import org.gradle.api.Plugin\nimport org.gradle.api.Project\nimport org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper\n\nclass MyPlugin: Plugin<Project> {\n    override fun apply(project: Project) {\n        project.pluginManager.apply("org.gradle.application") //This works\n        project.pluginManager.apply("\xc2\xbfkotlin(jvm)?") //<-- Here is my doubt\n        project.pluginManager.apply("\xc2\xbfkotlin(plugin.serialization)?") //<-- Here is my doubt\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

并像这样使用它:

\n
plugins {\n    id("com.example.myplugin")\n}\n
Run Code Online (Sandbox Code Playgroud)\n

gradle gradle-plugin gradle-kotlin-dsl kotlin-gradle-plugin buildsrc

6
推荐指数
1
解决办法
2614
查看次数