gradledependency-managementgradle-dependencies

In Gradle, how do I declare common dependencies in a single place?


In Maven there is a very useful feature where you can define a dependency in the <dependencyManagement> section of the parent POM, and reference that dependency from child modules without specifying the version or scope or whatever.

What are the alternatives in Gradle?


Solution

  • You can declare common dependencies in a parent script:

    ext.libraries = [ // Groovy map literal
        spring_core: "org.springframework:spring-core:3.1",
        junit: "junit:junit:4.10"
    ]
    

    From a child script, you can then use the dependency declarations like so:

    dependencies {
        compile libraries.spring_core
        testCompile libraries.junit
    }
    

    To share dependency declarations with advanced configuration options, you can use DependencyHandler.create:

    libraries = [
        spring_core: dependencies.create("org.springframework:spring-core:3.1") {
            exclude module: "commons-logging"
            force = true
        }
    ]
    

    Multiple dependencies can be shared under the same name:

    libraries = [
        spring: [ // Groovy list literal
            "org.springframework:spring-core:3.1", 
            "org.springframework:spring-jdbc:3.1"
        ]
    ]
    

    dependencies { compile libraries.spring } will then add both dependencies at once.

    The one piece of information that you cannot share in this fashion is what configuration (scope in Maven terms) a dependency should be assigned to. However, from my experience it is better to be explicit about this anyway.