Spring boot 使用Gradle Kotlin DSL定义不同项目的通用依赖项和插件版本
我有一组相关的Gradle项目,并非所有项目都在同一个存储库中(因此不共享相同的Spring boot 使用Gradle Kotlin DSL定义不同项目的通用依赖项和插件版本,spring-boot,gradle,dependency-management,gradle-kotlin-dsl,Spring Boot,Gradle,Dependency Management,Gradle Kotlin Dsl,我有一组相关的Gradle项目,并非所有项目都在同一个存储库中(因此不共享相同的Gradle.properties或settings.Gradle.kts文件)。 我的目标是让我的主构建脚本(build.gradle.kts文件)完全清除依赖项版本号,同时避免在多次设置或属性文件中指定相同的版本号 我正在寻找实现这一点的最佳实践,考虑到这些版本号可以出现在Gradle依赖项或插件声明中,并且经常需要在它们之间保持同步 作为一个用例,让我们配置需要spring引导的项目。 在这种情况下,我可以使用
Gradle.properties
或settings.Gradle.kts
文件)。
我的目标是让我的主构建脚本(build.gradle.kts
文件)完全清除依赖项版本号,同时避免在多次设置或属性文件中指定相同的版本号
我正在寻找实现这一点的最佳实践,考虑到这些版本号可以出现在Gradle依赖项或插件声明中,并且经常需要在它们之间保持同步
作为一个用例,让我们配置需要spring引导的项目。
在这种情况下,我可以使用Gradle平台项目来定义常见的依赖版本。例如,我的平台项目的build.gradle.kts
看起来有点像这样:
plugins {
`java-platform`
}
javaPlatform {
allowDependencies()
}
dependencies {
api(platform("org.springframework.boot:spring-boot-dependencies:2.3.0.RELEASE"))
constraints {
api("io.mockk:mockk:1.10.0")
api("org.junit.jupiter:junit-jupiter:5.6.2")
api("io.kotest:kotest-runner-junit5-jvm:4.0.6")
...
}
}
因此,我在一个平台项目中方便地指定了所有spring引导依赖项+我自己的依赖项
但是其他使用spring引导依赖关系的项目也需要org.springframework.boot
插件,其版本应该比平台项目中所需的spring引导依赖关系更好
正如一开始所说,这些项目位于其他存储库中,因此它们与平台项目不共享相同的配置文件。
在这些项目中,我将在其设置.gradle.kts
文件中添加以下块:
pluginManagement {
plugins {
id("org.springframework.boot").version("2.3.0.RELEASE")
...
}
}
它可以工作,因为在导入平台项目后,我可以按照预期保持主构建文件的版本号干净(spring引导依赖项和spring引导插件本身都不需要再指定它们的版本)
然而,这感觉并不好。现在,我的平台项目和使用spring boot插件的项目设置文件中都硬编码了相同版本的spring boot(2.3.0.RELEASE
)。现在我的问题是保持位于不同项目中的两个数字保持同步
哪一种是解决这个问题的“正确”梯度方法?有没有一种方法可以让Gradle平台项目也以类似的方式指定插件版本号,从而声明首选的依赖版本 我不确定这是否是您想要的,但您可以使用
gradle.properties
中定义的属性。然后使用settings.gradle.kts中的val version:String by settings
和build.gradle.kts中的val version:String by project
获取它。这并不完全是“正确”的gradle方式,有些人甚至不赞成使用属性来声明依赖项版本。我还知道,有些gradle插件允许您在插件使用相同版本时忽略依赖项上的版本。例如,使用kotlin gradle插件,您可以执行实现(“org.jetbrains.kotlin:kotlin stdlib”)
,而无需指定版本。春天似乎也有类似的东西。嗨@Nicolas,谢谢你的反馈!我知道如果我的所有项目都在同一个repo中共享相同的配置文件,我可以使用gradle.properties文件,但事实并非如此。我编辑了我的帖子,使之更加清晰。我知道spring依赖关系管理pugin,它模拟Maven行为。但我想学习的是,如果可能的话,如何使用原生的Gradle平台支持实现这一点。