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?
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.