[email protected] wrote:
I have another question regarding multiple project shared dependencies. I want to create a ClientModule, that I can refer to in some given sub-projects. Maybe I'm not familiar enough with Groovy, but that's how I would do (outside dependencies declaration, in root gradle.build): myModule = new ClientModule(id: 'moduleID')
  .clientModule("compile", "eu.sanco:saas:1.1.5") {
   dependency("org.springframework:spring-hibernate3:2.0.8") {
    exclude(module: "ehcache")
   }
  }
But now in the sub-project dependencies, I don't see how I could use this ClientModule. Looking at DependencyContainer API, I see no method to add directly a ClientModule object, only adding one by creating it. Is there a way to "register" my module in root build script, to make it available to all sub-scripts?


Again, there's no built-in way to do this (yet). In the meantime, you could use configuration injection to inject the client module. In the root build file:

subprojects {
   dependencies {
       clientModule('compile', ...)
   }
}

You could also do something like:

root build file:

someClientModule = dependencies.clientModule('compile' ...)

subproject build file:

dependencies {
   addDependencies(someClientModule)
}

Hope this is clear enough :o)

    ------------------------------------------------------------------------
    *From:* [email protected]
    [mailto:[email protected]]
    *Sent:* Tuesday, February 24, 2009 11:09 AM
    *To:* [email protected]
    *Subject:* RE: [gradle-user] Multiple project dependency management

    Thank you, it does the trick. I thought I tried that option
    before, obviously not hard enough :)
    Anyway, looking forward for a more 'gradely' way to do so.

        ------------------------------------------------------------------------
        *From:* Adam Murdoch [mailto:[email protected]]
        *Sent:* Monday, February 23, 2009 7:34 PM
        *To:* [email protected]
        *Subject:* Re: [gradle-user] Multiple project dependency
        management



        [email protected] wrote:

        Hi all,

        After reading the documentation, I have a hard time
        understanding multiple projects dependency. My requirement is
        quite simple. I'm still used to Maven, and I try to reproduce
        features that seem the most interesting to me.

        Here's my problem. I have a multiple java project
        environment, with one project depending on the other. For
        some obvious reason, the 2 projects depend on one same
        library. I thus need to add the same dependency to both
        projects, but I don't want to add this dependency globally
        (for ALL projects). How can I make sure that the same library
        is used by both projects, i.e. the version is the same? With
        Maven, it was quite easy, just declare all libraries and
        versions required in the parent pom, and simply declare the
        name of the library you want to use in the appropriate
        sub-projects. Thus, if you want to upgrade a library, just
        change the version in parent pom, the rest will follow.

        What is the most convenient way to do so with Gradle? I keep
        on reading chapter 14, but can't really find what I'm looking
        for.


        Currently, there's no built-in way to do this, though we do
        plan to add it.

        In the meantime, there are plenty of options for doing this
        using groovy. For example, you could have a map of library
        name -> dependency definitions in the root project, and use
        this from the each project:

        root project build.gradle

        libraries = [ 'someLib': 'org:someLib:1.2', 'otherLib':
        'other-org:otherLib:3.+' ]

        project1 build.gradle

        dependencies {
            compile libraries.someLib
        }

        project2 build.gradle

        dependencies {
            compile libraries.someLib, libraries.otherLib
        }

        Then, to upgrade a library, you change the contents of the map
        (ie a single place)

        Thanks for your help, and sorry if my question is clearly
        stated in the user guide.

        Erwan

Reply via email to