2

我们有大约 100 个微服务和 10 个团队来开发它们。技术栈几乎相同。当一个团队想要使用新版本的插件时,它会花一些时间将其嵌入到自己的项目中,然后再花一些时间将其嵌入到剩下的 9 个项目中。然后另一个团队想使用新版本,也花时间。我们使用共享 BOM,非常酷!但是 BOM 无法管理插件版本,所以现在团队仍在浪费时间检查插件和依赖项的兼容性。

我的研究只允许我开发以下依赖管理方法:我创建了一个自定义插件(plugin-version)。其中,我

1) 包括共享 BOM

2)创建文件版本

open class Versions {
   val Detekt = "1.2.1"
   val Spring = "2.2.4"
}

3)通过其他插件扩展的反射为我们的命令配置默认值。

p.plugins.withId("io.gitlab.arturbosch.detekt") {
                    val deteckt = p.extensions.getByName("detekt")
                    deteckt::class.memberProperties.first { it.name == "debug" }.let { property ->
                        if (property is KMutableProperty<*>) {
                            property.setter.call(deteckt, true)
                            println("Set property 'debug' on value 'true' in PluginVersion ")
                        }
                    }
                }

在项目中,我创建文件夹 buildSrc,其中应用 mu 自定义插件作为依赖项。buildSrc/build.kts

dependencies {
    implementation("ru.plugin-version:ru.plugin-version.gradle.plugin:1.0.0")
}

并创建拐杖文件 PluginVersion.kt

object PluginVersion : my.plugin.Versions()

在此之后,我可以在 buildSrc 中使用 PluginVersion,如 root/buildSrc

plugins {
    kotlin("jvm")
    id("io.gitlab.arturbosch.detekt") version PluginVersion.Detekt
}

加:

  1. 这是工作
  2. 我有一个地方负责所有插件的版本、依赖项和默认值 o 插件扩展
  3. 我可以使用与我的版本插件中的版本不同的插件版本(升级/降级版本)
  4. 如果我不想进行一些自定义,我可以在 buils.kts 中配置其他插件的范围

减:

  1. 它仅适用于 Kotlin,不适用于 Groovy
  2. 它需要 buildSrc 文件夹
  3. 当我单击 module1 中的类 PluginVersion 时,我只看到代码,IDEA 不会反编译它,而且我看不到插件的当前版本。

如果有人谈论控制插件版本的更简单方法或告诉如何改进当前版本(摆脱 PluginVersion.kt 类和 buildSrc 文件夹),我会很高兴

4

0 回答 0