I have the following use case:

The compile configuration only needs the API of a dependent library. I use 
transitive = false and works perfectly. I can build my application without 
using transitive dependencies as follows:

dependencies {

    libsList.each {  module ->
        compile( module ) { transitive = false }
        api( module )
    }

    /* Logging. */
    compile( libraries.slf4j )
    compile( libraries.logback_core )
    compile( libraries.logback_classic )

    /* Commons. */
    compile( libraries.commons_io )
    compile( libraries.commons_config )
    compile( libraries.commons_coll )

    ...
}

Later in the build script, I need a list all the transitive dependencies for 
those libraries because I don't want to include them in a fat jar. 

Couldn't figure out how to get the transitive dependencies in a custom 
configuration. I'm sure there must be a simple way to do this.

Thanks!
-leo

On Sep 27, 2011, at 1:07 PM, Hans Dockter wrote:

> 
> 
> On Tue, Sep 27, 2011 at 9:42 PM, Adrian Abraham <[email protected]> 
> wrote:
> I'm working on a fairly significant multiproject build which has many 
> dependencies (both inter-project and 3rd party). For reasons I won't get 
> into, I have to have explicit control over all dependencies used in the 
> project, so I've had to disable transitive dependency resolution for 3rd 
> party libraries. 
> 
> Right now, I'm using
> allprojects {
>  afterEvaluate { 
>   configurations.each { configuration -> configuration.transitive = false }
>  }
> }
> 
> You can also use:
> 
> allprojects {
>    configurations.all {
>       transitive = true
>    }
> }
> 
> That will create a rule that sets for all configurations that haven been 
> created or will be created the transitive property to false.
> 
> 
> Which seems to do the job.
> 
> Of course, with no transitive dependencies, if my project Foo depends on 
> ReallyCoolLibrary, and my project Bar depends on Foo, then Bar also has to 
> explicitly depend on ReallyCoolLibrary. What I'd love is to find a way to 
> automatically include transitive dependencies as declared by my own projects.
> 
> Is there a good way to do this?
> 
> You can also declare transitive dependencies on a per dependency base. So you 
> would not specify rules for configuration construction but for dependency 
> construction:
> 
> configurations.all {
>       dependencies.all { dep ->
>               if (!(dep instanceof ProjectDependency)) {
>                       dep.transitive = false
>               }
>       }
> }
> 
> This rule translates to:
> 
> For the dependencies that have been created or will be created of the 
> configurations that have been created or will be created resolve external 
> dependencies non transitively.
> 
> Those rules are one of the hidden gems of Gradle. I'm looking forward to see 
> them properly covered in one of the upcoming O'Reilly books by Tim and 
> Matthew.
> 
> Hans
> 
> --
> Hans Dockter 
> Founder, Gradle
> http://www.gradle.org, http://twitter.com/gradleware
> CEO, Gradleware - Gradle Training, Support, Consulting
> http://www.gradleware.com
> 
> 
>  
> 

Reply via email to