我想构建一个用Kotlin编写的Gradle插件,并将其发布到Gradle插件门户。但是,我不清楚需要什么样的构建配置才能实现这一目标。关于Gradle使用的“嵌入式Kotlin”,有很多令人困惑的信息和奇怪的错误。
The plugin development guide没有任何Kotlin+ build.gradle.kts
的示例(只有一个使用java-gradle-plugin
的简单示例)
有一些关于嵌入式Kotlin的技术细节,但它不清楚明确的需求,并且是更抽象的技术实现,而不是实用的“如何”指南。
使用gradle init
(v8.0.2)创建手动设置了Kotlin版本的项目,因此它可能与嵌入的Kotlin版本不匹配
// generated by `gradle init` command
plugins {
// Apply the Java Gradle plugin development plugin to add support for developing Gradle plugins
`java-gradle-plugin`
// Apply the Kotlin JVM plugin to add support for Kotlin.
id("org.jetbrains.kotlin.jvm") version "1.8.10"
}
构建用Kotlin编写的Gradle插件应使用什么配置?
1条答案
按热度按时间f87krz0w1#
据我所知,这些是配置Gradle项目的最佳实践规则,该项目将构建使用Kotlin编写的Gradle插件。
首先,注意标记†和‡
kotlin-dsl
插件,这些规则将自动配置*MAY† -这是允许的,但强烈建议您不要这样做。绕过此规则可能看起来不错,但可能会导致与Gradle版本或功能或其他插件的不可预见的兼容性问题
使用Kotlin开发Gradle插件-最佳实践规则
*必须仅使用以下插件组合:
java-gradle-plugin
和embedded-kotlin
插件。embedded-kotlin
(未记录)*不得将
kotlin("jvm')
与embedded-kotlin
或kotlin-dsl
一起使用*可以†使用任何版本的
kotlin("jvm")
,但应使用与Gradle相同的版本。有一个助手变量embeddedKotlinVersion
将自动提供此功能。*不得使用add
kotlin-stdlib-jdk8
或kotlin-reflect
Kotlin库或gradleKotlinDsl()
作为运行时/实施依赖项,因为它们将与Gradle的嵌入式版本冲突,并可能与其他Gradle插件冲突。kotlin-stdlib-jdk8
、kotlin-reflect
和gradleKotlinDsl()
上的compileOnly()
依赖项,并且版本等于embeddedKotlinVersion
compileOnly(gradleApi())
(版本默认为用于构建项目的Gradle版本)可能†与您希望插件支持的Gradle版本不匹配。-java-parameters -Xjvm-default=all -Xsam-conversions=class Xjsr305=strict
,以与Config Cache兼容,并提高与Java和Groovy的互操作性*应该使用Gradle的Plugin Publishing plugin将插件发布到Gradle插件门户。
示例
build.gradle.kts
由于大多数选项由
kotlin-dsl
插件配置,因此这是构建用Kotlin编写的Gradle插件的最简单方法。1.使用与您要支持的Gradle版本最匹配的Gradle版本创建项目,因为用于构建插件的Gradle版本将提供大多数默认值。
(虽然可以为每个Gradle版本创建Gradle插件的变体,但这非常复杂,而且Gradle API也不支持)
1.使用以下配置创建
build.gradle.kts
: