Coming from the world of Maven, the official documentation (Reactor Module Convergence) states that the following best practice should be applied to multi-module projects with regards to the project’s version:
The best practice in Maven is that all childs inherit the version from their parent and don’t define a new version.
In the world of Gradle… what is the best practice for sub-module versions in a multi-module project? Can the versions be different from sub-module to sub-module? Should the version be the same across all sub-modules? Should all sub-modules inherit their version from a parent that controls the definition of said version?
The versions can be different from project to project, yes.
Whether it makes sense you have to know.
I’m right now not aware of a best-practice in this regard.
I personally though prefer to have the same version and usually define it in the gradle.properties of the root project which makes it available to all projects in the build.
This way if you create a version tag, all projects have that tagged version and you instantly see which versions belong together.
But that is of course just true if the projects have a strong binding.
If they are just loosely or not-at-all coupled, the question might be why they are together in one build though.