aSe*_*emy 1 gradle kotlin gradle-plugin gradle-kotlin-dsl
我想构建一个用 Kotlin 编写的 Gradle 插件并将其发布到 Gradle 插件门户。但是,我不清楚需要什么构建配置来实现这一目标。关于 Gradle 使用的“嵌入式 Kotlin”,有很多令人困惑的信息和奇怪的错误。
\n插件开发指南没有 \xe2\x80\x99t 任何 Kotlin + 的示例build.gradle.kts(只有一个简单的使用java-gradle-plugin)
\xe2\x80\x99s一些关于嵌入式 Kotlin 的技术细节,但是 \xe2\x80\x99s 并没有明确明确的需求,并且比实际的 \xe2\x80\x9chow 到 \xe2\x80\ 更抽象的技术实现x9d 指南。
\n使用gradle init(v8.0.2) 创建一个手动设置 Kotlin 版本的项目,因此它可能与嵌入的 Kotlin 版本不匹配
// generated by `gradle init` command\n\nplugins {\n // Apply the Java Gradle plugin development plugin to add support for developing Gradle plugins\n `java-gradle-plugin`\n\n // Apply the Kotlin JVM plugin to add support for Kotlin.\n id("org.jetbrains.kotlin.jvm") version "1.8.10"\n}\nRun Code Online (Sandbox Code Playgroud)\n我应该使用什么配置来构建用 Kotlin 编写的 Gradle 插件?
\n据我了解,这些是配置 Gradle 项目的最佳实践规则,该项目将构建用 Kotlin 编写的 Gradle 插件。
\n首先,注意标记 \xe2\x80\xa0 和 \xe2\x80\xa1
\nkotlin-dsl\xe2\x80\xa1 - 如果应用插件,这些规则会自动配置必须仅使用这些插件组合:
\nKotlin DSL 插件,它也会自动应用java-gradle-plugin和embedded-kotlin插件。
plugins {\n `kotlin-dsl`\n}\nRun Code Online (Sandbox Code Playgroud)\nGradle Plugin 开发插件和embedded-kotlin(未记录)
plugins {\n `java-gradle-plugin`\n `embedded-kotlin`\n}\nRun Code Online (Sandbox Code Playgroud)\nGradle Plugin 开发插件和Kotlin Gradle 插件(但请注意下面的版本限制,并注意 Kotlin Gradle 插件会自动公开不兼容的依赖项(再次参见下文))
\nplugins {\n `java-gradle-plugin`\n // valid, but be aware of exposing incomatible dependencies\n kotlin("jvm") version embeddedKotlinVersion\n}\nRun Code Online (Sandbox Code Playgroud)\n不得kotlin("jvm")与embedded-kotlinOR一起使用kotlin-dsl
// \xe2\x9d\x8c invalid example\nplugins {\n `java-gradle-plugin`\n // don\'t specify two different Kotlin plugins\n `embedded-kotlin`\n kotlin("jvm") version "1.8.10"\n}\nRun Code Online (Sandbox Code Playgroud)\n\ xe2 \x80\xa0 可以使用任何版本的kotlin("jvm"),但应该使用与 Gradle 使用的版本相同的版本。有一个辅助变量 ,embeddedKotlinVersion它将自动提供此功能。
plugins {\n `java-gradle-plugin`\n kotlin("jvm") version embeddedKotlinVersion\n}\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\xa1必须按照Gradle 兼容性矩阵适当设置Kotlin 语言级别
\n// assume that the current Gradle version is 7.6\n\nplugins {\n `java-gradle-plugin`\n `embedded-kotlin`\n}\n\ntasks.withType<KotlinCompile>().configureEach {\n kotlinOptions {\n apiVersion = "1.4"\n languageVersion = "1.4"\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n不得使用 addkotlin-stdlib-jdk8或kotlin-reflectKotlin 库,或gradleKotlinDsl()作为运行时/实现依赖项,因为它们会与 Gradle\xe2\x80\x99s 嵌入式版本冲突,并可能与其他 Gradle 插件冲突。
\xe2\x80\xa1应该\xe2\x80\xa0 使用、和compileOnly()上的依赖项,其版本等于kotlin-stdlib-jdk8kotlin-reflectgradleKotlinDsl()embeddedKotlinVersion
\xe2\x80\xa1必须使用compileOnly(gradleApi())(版本默认为用于构建项目的 Gradle 版本)可以 xe2\x80\xa0 可以与您希望插件支持的 Gradle 版本不匹配。
\xe2\x80\xa1必须添加Kotlin 编译器参数 -java-parameters -Xjvm-default=all -Xsam-conversions=class Xjsr305=strict以与配置缓存兼容,并改进与 Java 和 Groovy 的互操作性
应使用 Gradle 的插件发布插件将插件发布到 Gradle 插件门户。
\nbuild.gradle.kts由于大多数选项都是由kotlin-dsl插件配置的,因此这提供了构建用 Kotlin 编写的 Gradle 插件的最简单方法。
使用与您想要支持的 Gradle 版本最匹配的 Gradle 版本创建项目,因为用于构建插件的 Gradle 版本将提供大多数默认值。
\n(虽然可以为每个 Gradle 版本创建 Gradle 插件的变体,但这非常复杂并且 Gradle API 不能很好地支持)
\nbuild.gradle.kts使用以下配置创建一个:
// build.gradle.kts\n\nplugins {\n `kotlin-dsl`\n id("com.gradle.plugin-publish") version "$gradlePluginPublishVersion"\n}\n\n// Optional: enable stricter validation, to ensure Gradle configuration is correct\ntasks.validatePlugins {\n enableStricterValidation.set(true)\n}\n\n// create the plugin\n// Read more: https://docs.gradle.org/current/userguide/implementing_gradle_plugins.html#plugin-development-plugin\ngradlePlugin {\n plugins {\n create("simplePlugin") {\n id = "org.example.greeting"\n implementationClass = "org.example.GreetingPlugin"\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |