Hi Leo,

This is a good question. Would you mind posting it on the new Gradle Forums? 
http://forums.gradle.org/

It has much greater visibility to future users there. I'll keep an eye out for 
it and respond there when I see it.

On 29/10/2011, at 3:11 AM, Leo Neumeyer wrote:

> 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 <adr...@shadowspire.net> 
>> 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
>> 
>> 
>>  
>> 
> 

-- 
Luke Daley
Principal Engineer, Gradleware 
http://gradleware.com

Reply via email to