Dependency Handler
A DependencyHandler
is used to declare dependencies. Dependencies are grouped into configurations (see org.gradle.api.artifacts.Configuration).
To declare a specific dependency for a configuration you can use the following syntax:
dependencies {
configurationNamedependencyNotation
}
Example shows a basic way of declaring dependencies.
plugins {
id 'java' // so that we can use 'implementation', 'testImplementation' for dependencies
}
dependencies {
//for dependencies found in artifact repositories you can use
//the group:name:version notation
implementation 'commons-lang:commons-lang:2.6'
testImplementation 'org.mockito:mockito:1.9.0-rc1'
//map-style notation:
implementation group: 'com.google.code.guice', name: 'guice', version: '1.0'
//declaring arbitrary files as dependencies
implementation files('hibernate.jar', 'libs/spring.jar')
//putting all jars from 'libs' onto compile classpath
implementation fileTree('libs')
}
Advanced dependency configuration
To do some advanced configuration on a dependency when it is declared, you can additionally pass a configuration closure:
dependencies {
configurationName(dependencyNotation){
configStatement1configStatement2
}
}
- Forcing certain dependency version in case of the conflict.
- Excluding certain dependencies by name, group or both. More details about per-dependency exclusions can be found in docs for exclude.
- Avoiding transitive dependencies for certain dependency.
plugins {
id 'java' // so that I can declare 'implementation' dependencies
}
dependencies {
implementation('org.hibernate:hibernate') {
//in case of versions conflict '3.1' version of hibernate wins:
version {
strictly('3.1')
}
//excluding a particular transitive dependency:
exclude module: 'cglib' //by artifact name
exclude group: 'org.jmock' //by group
exclude group: 'org.unwanted', module: 'iAmBuggy' //by both name and group
//disabling all transitive dependencies of this dependency
transitive = false
}
}
- Declaring dependency to a specific configuration of the module.
- Explicit specification of the artifact. See also artifact.
plugins {
id("java-library")
}
dependencies {
// Configuring dependency to specific configuration of the module
// This notation should _only_ be used for Ivy dependencies
implementation(group: "org.someOrg", name: "someModule", version: "1.0", configuration: "someConf")
// Configuring dependency on 'someLib' module
implementation(group: 'org.myorg', name: 'someLib', version:'1.0') {
// Explicitly adding the dependency artifact:
// Prefer variant-aware dependency resolution
artifact {
// Useful when some artifact properties unconventional
name = 'someArtifact' // Artifact name different than module name
extension = 'someExt'
type = 'someType'
classifier = 'someClassifier'
}
}
}
Dependency notations
There are several supported dependency notations. These are described below. For each dependency declared this way, a Dependency object is created. You can use this object to query or further configure the dependency.
You can also always add instances of org.gradle.api.artifacts.Dependency directly:
configurationName <instance>
Dependencies can also be declared with a org.gradle.api.provider.Provider that provides any of the other supported dependency notations.
External dependencies
There are two notations supported for declaring a dependency on an external module. One is a string notation formatted this way:
configurationName "group:name:version:classifier@extension"
The other is a map notation:
configurationName group: group, name: name, version: version, classifier:
classifier, ext: extension
In both notations, all properties, except name, are optional.
External dependencies are represented by a .
plugins {
id 'java' // so that we can use 'implementation', 'testImplementation' for dependencies
}
dependencies {
//for dependencies found in artifact repositories you can use
//the string notation, e.g. group:name:version
implementation 'commons-lang:commons-lang:2.6'
testImplementation 'org.mockito:mockito:1.9.0-rc1'
//map notation:
implementation group: 'com.google.code.guice', name: 'guice', version: '1.0'
}
Project dependencies
To add a project dependency, you use the following notation:
configurationName project(':some-project')
The notation project(':project-a')
is similar to the syntax you use when configuring a projectA in a multi-module gradle project.
Project dependencies are resolved by treating each consumable configuration in the target project as a variant and performing variant-aware attribute matching against them. However, in order to override this process, an explicit target configuration can be specified:
configurationName project(path: ':project-a', configuration: 'someOtherConfiguration')
Project dependencies are represented using a org.gradle.api.artifacts.ProjectDependency.
File dependencies
You can also add a dependency using a org.gradle.api.file.FileCollection:
configurationName files('a file')
plugins {
id 'java' // so that we can use 'implementation', 'testImplementation' for dependencies
}
dependencies {
//declaring arbitrary files as dependencies
implementation files('hibernate.jar', 'libs/spring.jar')
//putting all jars from 'libs' onto compile classpath
implementation fileTree('libs')
}
File dependencies are represented using a org.gradle.api.artifacts.FileCollectionDependency.
Dependencies to other configurations
You can add a dependency using a org.gradle.api.artifacts.Configuration.
When the configuration is from the same project as the target configuration, the target configuration is changed to extend from the provided configuration.
When the configuration is from a different project, a project dependency is added.
Gradle distribution specific dependencies
It is possible to depend on certain Gradle APIs or libraries that Gradle ships with. It is particularly useful for Gradle plugin development. Example:
//Our Gradle plugin is written in groovy
plugins {
id 'groovy'
}
// now we can use the 'implementation' configuration for declaring dependencies
dependencies {
//we will use the Groovy version that ships with Gradle:
implementation localGroovy()
//our plugin requires Gradle API interfaces and classes to compile:
implementation gradleApi()
//we will use the Gradle test-kit to test build logic:
testImplementation gradleTestKit()
}
Client module dependencies
Client module dependencies are deprecated and will be removed in Gradle 9.0. Please use component metadata rules instead.To add a client module to a configuration you can use the notation:
configurationName module(moduleNotation) {
module dependencies
}
Properties
Functions
Adds a dependency to the given configuration, and configures the dependency using the given expression.
Creates a dependency without adding it to a configuration.
Creates a dependency on a module without adding it to a configuration.
Builds the dependency notation for the named Kotlin module at the embedded version (currently 2.0.20).
Creates a dependency on a client module without adding it to a configuration.
Kotlin extension function for org.gradle.api.artifacts.dsl.DependencyHandler.project.
Creates a dependency on a project without adding it to a configuration.
Kotlin extension function taking kotlin.reflect.KClass for org.gradle.api.artifacts.dsl.DependencyHandler.registerTransform.
Returns the extension of the specified type.
Returns the extension of the specified extensionType.