2
votes

I have a multi-module project with a directory structure like:

proj
|-modA
|-modB
|-modMain
\-modSysTest

The dependencies are:

modB -> modA
modMain -> modB
modMain -> modA
modSysTest -> modMain

We currently use Ant as our build system. Every module has a build.xml. There is a master.xml that runs the multi-module build, which is in modMain.

I am investigating switching our project to use gradle. I can get a multi-module build working if I put a build.gradle and settings.gradle in a new sibling directory and set up the dependent modules using includeFlat.

I tried moving the gradle files into modMain, which is the home of both the main component of our system as well as the top-level build script (master.xml) that builds the whole system, but I cannot get the build working this way. My main stumbling block at the moment is trying to configure modSysTest to depend on modMain from within modMain.

Here is the settings.gradle from modMain:

includeFlat 'modA', 'modB', 'modSysTest'

Here is the build.gradle file from modMain:

allprojects {
    apply plugin: 'java'

    repositories {
        mavenCentral()
    };
    dependencies {
        testCompile 'junit:junit:4.11'
    }
}

project(':modB') {
    dependencies {
        compile project(':modA')
    }
}

project(':modSysTest') {
    dependencies {
        compile project(':modMain')
    }
}

dependencies {
    compile project(':modA'), project(':modB')
}

When using this configuration, I get the error:

A problem occurred evaluating root project 'modMain'.
> Project with path ':modMain' could not be found in project ':modSysTest'.

I am not sure how to specify modMain as a dependency for modSysTest.

1

1 Answers

1
votes

The project path of the root project is :, not :modMain. It's not very customary (but possible) to have code in the root project. I don't see how putting build.gradle and settings.gradle into a sibling directory of modMain would give a different result (unless you also changed the contents of settings.gradle). Note that with such a setup, Gradle won't find settings.gradle unless you start the build from the modMain directory or pass the location of the settings file with -c.