Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Gradle - multiple project and git repositories

We have 3 projects and a 4th one that is shared among them.

A multiple project in gradle requires one to create a wrapper project and include all the sub projects in it.

Each of our sub projects are being worked on by different team members and we use git as an svn.

Our concern before going into gradle is the fact that we will only have 1 git repository that consists of the wrapper project with all sub projects instead of 4 different repos, each for each sub project.

1) Are we missing something?

2) Is it possible to create 4 repos on a multi project?

3) One of our requirements is to deploy a single war (for example only webapp #1 out of the 4)--does using the multi project template make it possible?

like image 637
Urbanleg Avatar asked Dec 19 '13 09:12

Urbanleg


2 Answers

ad 1) You have some choices:

  • Use a single Git repo.
  • Use multiple Git repos and exchange artifacts via a binary repository (e.g. Artifactory), with artifacts being produced on a regular basis by CI jobs.
  • Use something like Github submodules to create a "virtual" overall Git repo (wouldn't recommend this one).

ad 2) Gradle doesn't really care how many Git repos the build is comprised of, as long as everything that settings.gradle points to (at least all build scripts) exists on disk when the build starts. Of course it may be inconvenient for developers (and CI admins) to juggle multiple Git repositories and put them in the right (relative) locations.

ad 3) Yes.

like image 154
Peter Niederwieser Avatar answered Sep 21 '22 14:09

Peter Niederwieser


I stumbled across this question on the same quest, and only later somebody pointed out another option to me (it's really a variant of the third choice listed under ad 1 in https://stackoverflow.com/a/20678444/1016514), which seems like an elegant hack:

You keep the subprojects in separate Git repos, and from within your root project point to them by setting the respective rootDir properties. This requires a fixed checkout layout, obviously, but that would usually be the case anyway.

The approach is described here: https://medium.com/codequest/gradle-multi-project-build-substituting-jar-dependencies-with-local-projects-4a5323f8680b

Update with Gradle 7.3+: this will now yield a warning, and likely not work after some point in the future:

Subproject ':xyz' has location '...\xyz' which is outside of the project root.
This behaviour has been deprecated and is scheduled to be removed in Gradle 8.0.
Consult the upgrading guide for further information: 
https://docs.gradle.org/7.3.1/userguide/upgrading_version_7.html#deprecated_flat_project_structure
like image 30
Hans Avatar answered Sep 22 '22 14:09

Hans