我们有大约 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
}
加:
- 这是工作
- 我有一个地方负责所有插件的版本、依赖项和默认值 o 插件扩展
- 我可以使用与我的版本插件中的版本不同的插件版本(升级/降级版本)
- 如果我不想进行一些自定义,我可以在 buils.kts 中配置其他插件的范围
减:
- 它仅适用于 Kotlin,不适用于 Groovy
- 它需要 buildSrc 文件夹
- 当我单击 module1 中的类 PluginVersion 时,我只看到代码,IDEA 不会反编译它,而且我看不到插件的当前版本。
如果有人谈论控制插件版本的更简单方法或告诉如何改进当前版本(摆脱 PluginVersion.kt 类和 buildSrc 文件夹),我会很高兴