Gradle项目配置文件-repositories节点
repositories
块用于声明 Gradle 在解析依赖时要访问的仓库。仓库是存放库文件的地方,Gradle 会从这些位置下载构建项目所需的依赖。repositories
块可以指定多个仓库来源,如本地仓库、远程 Maven 仓库或自定义的 HTTP/FTP 服务器。以下是 repositories
块中所有常见配置的详细说明:
1. mavenCentral()
repositories {
mavenCentral()
}
作用:
mavenCentral()
配置 Gradle 使用 Maven 中央仓库(Central Repository)来解析和下载依赖项。Maven Central 是 Java 社区最常用的公共仓库,托管了大量开源的 Java 库。
使用场景:
- 项目使用开源库,并且这些库发布在 Maven 中央仓库上时使用。
- Maven Central 提供稳定和可靠的访问,是大多数 Java 项目的首选仓库。
2. jcenter()
repositories {
jcenter()
}
作用:
jcenter()
配置 Gradle 使用 JCenter 仓库。JCenter 曾经是一个流行的公共仓库,但已逐步淘汰并停止服务。很多项目曾经依赖于 JCenter,然而现在推荐使用其他仓库(如 Maven Central)。
使用场景:
- 历史项目可能依赖于 JCenter 上的库,但新项目应避免使用。
3. maven { url '...' }
repositories {
maven {
url 'https://repo.spring.io/milestone'
}
}
作用:
maven { url '...' }
允许你配置自定义的 Maven 仓库 URL,可以是企业内部的私有仓库或特定的远程仓库。
配置选项:
url
: 指定仓库的 URL,可以是 HTTPS、FTP、或文件系统路径。credentials
: 如果仓库需要身份验证,可以配置credentials
块来提供用户名和密码。maven {
url 'https://private-repo.com/repo'
credentials {
username 'user'
password 'password'
}
}
使用场景:
- 项目依赖的库不在公共仓库中,或使用公司内部的 Maven 仓库时。
- 使用需要特定依赖的第三方仓库(例如 Spring 项目的 Milestone 仓库、Google 的 Android 仓库等)。
4. ivy { url '...' }
repositories {
ivy {
url 'https://repo.example.com/ivy-repo'
}
}
作用:
ivy { url '...' }
配置了 Ivy 仓库,而不是 Maven 仓库。Ivy 是另一种依赖管理系统,虽然不如 Maven 常用,但仍然在一些项目中使用。
使用场景:
- 项目使用 Apache Ivy 进行依赖管理,或者需要从 Ivy 格式的仓库中解析依赖项时。
5. flatDir { dirs '...' }
repositories {
flatDir {
dirs 'libs'
}
}
作用:
flatDir
配置了一个本地目录作为依赖仓库,依赖库以本地 JAR 文件的形式存放在指定的目录中。
使用场景:
- 项目使用本地的 JAR 文件作为依赖项,而不需要从远程仓库下载。
- 例如,项目依赖某些自定义构建的库,可以直接把这些 JAR 文件放在
libs
目录下,然后通过flatDir
引入它们。
6. google()
repositories {
google()
}
作用:
google()
配置 Gradle 使用 Google 的 Maven 仓库,这个仓库主要用于 Android 开发,托管了 Android SDK 和相关工具的依赖项。
使用场景:
- Android 项目开发时常用,尤其是依赖 Android Support Library、Jetpack、或 Android 编译工具等。
7. mavenLocal()
repositories {
mavenLocal()
}
作用:
mavenLocal()
配置 Gradle 使用本地 Maven 仓库。这个仓库通常位于 ~/.m2/repository/
(或 Windows 的 C:\Users\username\.m2\repository\
)目录中,Maven 在安装(如 mvn install
)时会将构件存储在此处。
使用场景:
- 当你在本地开发一个库,并且将其安装到本地 Maven 仓库后,想要在另一个项目中使用该库时。
- 本地构建并安装的 JAR 文件或其他构件可以直接从 Maven 本地仓库中引用。
8. exclusiveContent
repositories {
exclusiveContent {
forRepository {
maven {
url 'https://custom-repo.com'
}
}
filter {
includeModule("com.example", "specific-module")
}
}
}
作用:
exclusiveContent
用于限制某些特定的依赖只从指定的仓库中解析,而不会从其他仓库下载。这对依赖管理的粒度控制更细,可以避免下载错误版本的库。
使用场景:
- 当你有一个特殊的依赖项需要从特定仓库下载,而不能被其他仓库替代时。
9. metadataSources
repositories {
maven {
url 'https://custom-repo.com'
metadataSources {
mavenPom()
artifact()
}
}
}
作用:
metadataSources
配置如何解析仓库中的元数据。元数据可以是 mavenPom()
(Maven POM 文件)、artifact()
(实际的 JAR 或其他构件文件),或者 gradleMetadata()
(Gradle 生成的元数据)。
使用场景:
- 用于指定 Gradle 解析依赖项元数据时的策略。
总结
- 公共仓库:
mavenCentral()
、google()
是常用的公共仓库。 - 自定义仓库:
maven { url '...' }
允许你指定自定义的仓库地址。 - 本地仓库:
mavenLocal()
和flatDir
允许从本地的 Maven 仓库或本地目录加载依赖。 - 高级用法:
exclusiveContent
和metadataSources
提供了更精细的依赖解析控制,适用于特定场景。
repositories
块允许你灵活地配置依赖项的来源,根据项目需求选择适当的仓库配置。