EricJ
EricJ

Reputation: 93

Gradle multiproject doesn't add projects to classpath

I have some projects that depend on others. I also have a project that depends on two projects that each one depends on the same project. Something like this:

-Project A
 * Project 1
  ** Project C
 * Project 2
  ** Project C

And the structure of the workspace is like this:

-ProjectA
-ProjectC
-Project1
-Project2

All the projects are at the same level.

So in the settings.gradle in my Project A I have:

include ':Project1',':Project1:ProjectC',[...]
project(':Project1') = new File('../Project1')
project(':Project2') = new File('../Project2')
project(':Project1:ProjectC') = new File('../ProjectC')
project(':Project2:ProjectC') = new File('../ProjectC')

And in the build.gradle I do:

dependencies{ compile project('Project1'),project('Project2')

The problem is that it is not correctly added to the classpath. I think since both Project1 and Project2 depends on ProjectC it is overwritten somehow. Any ideas?

Thanks.

EDIT

Here is the tree of dependencies:

Root project 'ProjectA'
+--- Project ':ProjectB'
|    \--- Project ':ProjectB:Project1'
|         +--- Project ':ProjectB:Project1:Project2'
|         \--- Project ':ProjectB:Project1:Project3'
\--- Project ':ProjectC'
     \--- Project ':ProjectC:Project1'
          +--- Project ':ProjectC:Project1:Project2'
          \--- Project ':ProjectC:Project1:Project3'

Upvotes: 2

Views: 615

Answers (2)

EricJ
EricJ

Reputation: 93

What I finally did is change in the classpath the paths that where wrong like this:

build.gradle

 eclipse{
    classpath{
        file{
             whenMerged { classpath ->

                classpath.entries.find { entry -> 
                    entry.kind == 'src' && entry.path.contains('ProjectC')
                }.each{ entry ->
                    entry.path=file("/ProjectC")
                }



            }
        }
    }
 }

And it works fine. I still don't know why gradle doesn't make the classpath correctly...

Upvotes: 0

RaGe
RaGe

Reputation: 23697

For a workspace that looks like this:

rootFolder
|
|- build.gradle 
|- settings.gradle 
|
|- ProjectA
|  |-build.gradle
|
|- Project1
|  |-build.gradle
|
|- Project2
|  |-build.gradle
|
|- ProjectC
   |-build.gradle

Your settings.gradle should look like this (irrespective of dependency relationships of the sub projects):

include ':ProjectA',':Project1',':Project2',':ProjectC',

You're just telling the root project that there are 4 subprojects and where they are located. That's it.

Now the dependency relationships are handled inside each subproject's build.gradle files. For a dependency relationship that looks like this:

ProjectA
|-Project1
|  |-ProjectC
|
|-Project2
   |-ProjectC  

ProjectA's build.gradle:

dependencies{
    compile project(':Project1')
    compile project(':Project2')
}

Project1's build.gradle:

dependencies{
    compile project(':ProjectC')
}

Project2's build.gradle:

dependencies{
    compile project(':ProjectC')
}

Upvotes: 1

Related Questions