3

我正在编写一个插件来从现有的 Gradle 构建脚本中提取一些样板。现有的构建脚本主要用 Groovy 编写并编译 Java。

为了构建我的插件,我使用了 Gradle Kotlin DSL,我想我也会借此机会在 Kotlin 中编写插件。这一切都有效,但现在我的插件对 Kotlin 有很大的依赖 - Gradle 文档特别建议最小化外部库

Java 和 Groovy 插件避免了这种情况,因为 Java 和 Groovy 是与 Gradle 共享的依赖项,但 Kotlin 不是共享的先决条件,因此我们必须担心不同插件所需的潜在冲突 Kotlin 版本。

我认为我应该采用以下方法之一,但不清楚哪种方法:

  1. 只需将 Kotlinstdlib列为标准依赖项并信任 Gradle 即可解决问题。

    这适用于一个插件,但是当另一个插件也被使用但取决于不同的 Kotlin 时,我是否应该预料到会出现问题?

  2. 为我的插件构建某种 uber shadowJar 阴影 Kotlin 库

    暗示我这样写的每个插件都会比必要的大 10 MB。

  3. 放弃基于 Kotlin 的插件并用 Java/Groovy 重写

    放弃新的善良将是一种耻辱,但可能更好地避免上述罪恶。

欢迎推荐!

4

2 回答 2

1

Gradle Community Slack中提出了这个问题,建议使用 Gradle 的kotlin-dsl插件来自动配置对版本的依赖关系gradleApi()embeddedKotlin()因此无论 Kotlin 版本与 Gradle 的 Kotlin DSL 支持捆绑在一起。

我担心这可能会引入对使用 Kotlin DSL 的调用脚本的依赖,但我已经使用 Groovy 脚本进行了测试,并且能够使用我的插件。我认为它仍然依赖于支持 Kotlin DSL 的 Gradle 版本 - 即 4.0+。

于 2019-05-16T13:00:28.300 回答
1

由于您的插件正在替换样板文件并且可能不会公开发布,因此将其编写为Gradle Kotlin DSL 中的脚本插件是否有意义?这样一个足够新的 Gradle 应该能够原生地理解它。

于 2019-05-16T11:11:19.313 回答