Why doesn't Gradle include transitive dependencies in compile / runtime classpath?
        Posted  
        
            by 
                Francis Toth
            
        on Programmers
        
        See other posts from Programmers
        
            or by Francis Toth
        
        
        
        Published on 2013-06-23T22:08:22Z
        Indexed on 
            2013/06/24
            16:36 UTC
        
        
        Read the original article
        Hit count: 589
        
builds
|build-system
I'm learning how Gradle works, and I can't understand how it resolves a project transitive dependencies.
For now, I have two projects :
- projectA : which has a couple of dependencies on external libraries
- projectB : which has only one dependency on projectA
No matter how I try, when I build projectB, gradle doesn't include any projectA dependencies (X and Y) in projectB's compile or runtime classpath. I've only managed to make it work by including projectA's dependencies in projectB's build script, which, in my opinion does not make any sense. These dependencies should be automatically attached to projectB. I'm pretty sure I'm missing something but I can't figure out what.
I've read about "lib dependencies", but it seems to apply only to local projects like described here, not on external dependencies.
Here is the build.gradle I use in the root project (the one that contains both projectA and projectB) :
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.3'
    }
}
subprojects {
    apply plugin: 'java'
    apply plugin: 'idea'
    group = 'com.company'
    repositories {
        mavenCentral()
        add(new org.apache.ivy.plugins.resolver.SshResolver()) {
            name = 'customRepo'
            addIvyPattern "ssh://.../repository/[organization]/[module]/[revision]/[module].xml"
            addArtifactPattern "ssh://.../[organization]/[module]/[revision]/[module](-[classifier]).[ext]"
        }
    }
    sourceSets {
        main {
            java {
                srcDir 'src/'
            }
        }
    }
    idea.module { downloadSources = true }
    // task that create sources jar
    task sourceJar(type: Jar) {
        from sourceSets.main.java
        classifier 'sources'
    }
    // Publishing configuration
    uploadArchives {
        repositories {
            add project.repositories.customRepo
        }
    }
    artifacts {
        archives(sourceJar) {
            name "$name-sources"
            type 'source'
            builtBy sourceJar
        }
    }
}
This one concerns projectA only :
version = '1.0'
dependencies {
    compile 'com.company:X:1.0'
    compile 'com.company:B:1.0'
}
And this is the one used by projectB :
version = '1.0'
dependencies {
    compile ('com.company:projectA:1.0') {
        transitive = true
    }
}
Thank you in advance for any help, and please, apologize me for my bad English.
© Programmers or respective owner