我正在为 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
如何从 buildSrc 插件应用 Kotlin 插件?
\n我有一个 Kotlin 项目,其 build.gradle.kts 文件包含以下内容:
\nplugins {\n application\n kotlin("jvm")\n kotlin("plugin.serialization")\n}\nRun Code Online (Sandbox Code Playgroud)\n我想在 buildSrc 中创建一个自定义插件:
\nimport 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}\nRun Code Online (Sandbox Code Playgroud)\n并像这样使用它:
\nplugins {\n id("com.example.myplugin")\n}\nRun Code Online (Sandbox Code Playgroud)\n gradle gradle-plugin gradle-kotlin-dsl kotlin-gradle-plugin buildsrc