The sample project is available here: https://github.com/TheBestPessimist/gradle-buildSrc-example/tree/8177332319743c9e3c0e49c29815666167977585 and is a kotlin + spring boot project.
I want to have a “common gradle project” that i apply to my subprojects.
It is found at: buildSrc/src/main/kotlin/land/tbp/wwsc/tralala.gradle.kts
and it applies multiple plugins, one of which is id("org.springframework.boot")
.
In order to set the versions of these plugins, i need to add the plugins as dependencies inside the file buildSrc/build.gradle.kts
.
I have buildSrc/src/main/kotlin/land/tbp/wwsc/Versions.kt
where i want to store all my versions. this also includes plugins.
I want to do this because the dependency implementation(platform("org.springframework.boot:spring-boot-dependencies:$springBootVersion"))
(here) must have the same version as the one of the plugin that is applied.
The problem is that i cannot access import land.tbp.wwsc.Versions.springBootVersion
from buildSrc/build.gradle.kts
, so what i need to do is duplicate the properties which store the versions inside buildSrc/build.gradle.kts
as well, and whenever i have to update a version, i need to so that in 2 places.
buildSrc/build.gradle.kts -> springBootVersion
buildSrc/src/main/kotlin/land/tbp/wwsc/Versions.kt -> Versions.springBootVersion
Please see here: https://github.com/TheBestPessimist/gradle-buildSrc-example/blob/8177332319743c9e3c0e49c29815666167977585/buildSrc/build.gradle.kts
My question is: is there a way to have the cake and eat it too?
Is there a way to use the object buildSrc/src/main/kotlin/land/tbp/wwsc/Versions.kt
everywhere? Or is there an alternative which does not lead to code duplication?