Multi-project build with all projects in the same folder?


(Christian Abegg) #1

I am transforming application from Ant to Gradle. The application consists of three smaller parts: frontend, backend and common. The whole codebase shares the same project directory. The directory structure is as follows:

root
|-- src
|
  |-- frontend
|
  |-- backend
|
  |-- common
|-- frontend.gradle
|-- backend.gradle
|-- common.gradle

By setting the ‘includes’ and ‘excludes’ in ‘sourceSets.main.java’ in the specific *.gradle files correctly, I can build these three projects individually.

Now, I’d like to set up this scenario as a Gradle multi-project build without changing the directory structure to get the advantage of project dependencies.

To achieve this, I moved the project specific *.gradle files to a subfolder called ‘projects’. And I added a ‘settings.gradle’ and ‘build.gradle’ file to the root directory.

root
|-- src
|
  |-- frontend
|
  |-- backend
|
  |-- common
|-- projects
|
  |-- frontend.gradle
|
  |-- backend.gradle
|
  |-- common.gradle
|-- build.gradle
|-- settings.gradle

In the ‘settings.gradle’ file I manipulate the ProjectDescriptor so that the project’s directory is the root directory.

include 'common'
include 'frontend'
include 'backend'
  ProjectDescriptor projectDescriptor = project(":common")
projectDescriptor.projectDir = rootDir
projectDescriptor.buildFileName = new File(rootDir, "projects/"+projectDescriptor.name+".gradle")

Unfortunately, this approach fails with the following exception:

Could not select the default project for this build. Multiple projects in this build have project directory ‘/home/my’: [root project ‘my’, project ‘:common’]

Is it even possible to have several projects sharing the same directory? Do I just have to avoid the exception? Or use a completely different approach?


(René Groeschke) #2

Using same project folder for multiple subprojects are not supported atm. One workaround might be to point to a specific folder (that might not even exists) and let reconfigure properties like buildFileName and buildDir property. cheers, René