3. Declaring repositories
Gradle needs to know where it can download the dependencies used in the project.
For example, the com.google.guava:guava:30.0-jre
dependency can be downloaded from the public Maven Central repository mavenCentral()
.
Gradle will find and download the guava
source code (as a jar
) from Maven Central and use it build the project.
You can add any number of repositories for your dependencies by configuring the repositories
block in your build.gradle(.kts)
file:
repositories {
mavenCentral() (1)
maven { (2)
url = uri("https://company/com/maven2")
}
mavenLocal() (3)
flatDir { (4)
dirs("libs")
}
}
1 | Public repository |
2 | Private/Custom repository |
3 | Local repository |
4 | File location |
repositories {
mavenCentral() (1)
maven { (2)
url = uri("https://company/com/maven2")
}
mavenLocal() (3)
flatDir { (4)
dirs "libs"
}
}
1 | Public repository |
2 | Private/Custom repository |
3 | Local repository |
4 | File location |
Gradle can resolve dependencies from one or many repositories based on Maven, Ivy or flat directory formats.
If a library is available from more than one of the listed repositories, Gradle will simply pick the first one.
Declaring a public repository
Organizations building software may want to leverage public binary repositories to download and consume open source dependencies. Popular public repositories include Maven Central and the Google Android repository.
Gradle provides built-in shorthand notations for these widely-used repositories:
repositories {
mavenCentral()
google()
gradlePluginPortal()
}
repositories {
mavenCentral()
google()
gradlePluginPortal()
}
Under the covers Gradle resolves dependencies from the respective URL of the public repository defined by the shorthand notation. All shorthand notations are available via the RepositoryHandler API.
Declaring a private or custom repository
Most enterprise projects establish a binary repository accessible only within their intranet. In-house repositories allow teams to publish internal binaries, manage users and security, and ensure uptime and availability.
Specifying a custom URL is useful for declaring less popular but publicly-available repositories. Repositories with custom URLs can be specified as Maven or Ivy repositories by calling the corresponding methods available on the RepositoryHandler API:
repositories {
maven {
url = uri("https://maven-central.storage.apis.com")
}
ivy {
url = uri("https://github.com/ivy-rep/")
}
}
repositories {
maven {
url = uri("https://maven-central.storage.apis.com")
}
ivy {
url = uri("https://github.com/ivy-rep/")
}
}
Declaring a local repository
Gradle can consume dependencies available in a local Maven repository.
To declare the local Maven cache as a repository, add this to your build script:
repositories {
mavenLocal()
}
repositories {
mavenLocal()
}
Understanding supported repository types
Gradle supports a wide range of sources for dependencies, both in terms of format and in terms of connectivity. You may resolve dependencies from:
-
Different formats
-
a Maven compatible artifact repository (e.g: Maven Central)
-
an Ivy compatible artifact repository (including custom layouts)
-
-
with different connectivity
-
a wide variety of remote protocols such as HTTPS, SFTP, AWS S3 and Google Cloud Storage based on the presence of artifacts.
Here is a quick snapshot:
repositories {
// Ivy Repository with Custom Layout
ivy {
url 'https://your.ivy.repo/url'
layout 'pattern', {
ivy '[organisation]/[module]/[revision]/[type]s/[artifact]-[revision].[ext]'
artifact '[organisation]/[module]/[revision]/[type]s/[artifact]-[revision].[ext]'
}
}
// Authenticated HTTPS Maven Repository
maven {
url 'https://your.secure.repo/url'
credentials {
username = 'your-username'
password = 'your-password'
}
}
// SFTP Repository
maven {
url 'sftp://your.sftp.repo/url'
credentials {
username = 'your-username'
password = 'your-password'
}
}
// AWS S3 Repository
maven {
url "s3://your-bucket/repository-path"
credentials(AwsCredentials) {
accessKey = 'your-access-key'
secretKey = 'your-secret-key'
}
}
// Google Cloud Storage Repository
maven {
url "gcs://your-bucket/repository-path"
}
}
Next Step: Learn about Centralizing Dependencies >>