Gradle 支持多种来源解析依赖,适应不同的元数据格式和连接方式。您可以从以下位置解析依赖:
-
兼容 Maven 的工件仓库 (例如,Maven Central)
-
兼容 Ivy 的工件仓库 (包括自定义布局)
Maven 仓库
许多组织在 Maven 仓库中托管依赖。Gradle 可以通过指定 URL 来声明 Maven 仓库
Kotlin
Groovy
repositories {
maven {
url = uri("http://repo.mycompany.com/maven2")
}
}
复合 Maven 仓库
有时,POM 发布在一个位置,而 JAR 发布在另一个位置。您可以如下定义这样的仓库
Kotlin
Groovy
repositories {
maven {
// Look for POMs and artifacts, such as JARs, here
url = uri("http://repo2.mycompany.com/maven2")
// Look for artifacts here if not found at the above location
artifactUrls("http://repo.mycompany.com/jars")
artifactUrls("http://repo.mycompany.com/jars2")
}
}
Gradle 将首先在基本 URL 查找 POM 和工件,如果找不到工件,它将检查额外的 artifactUrls。
身份验证的 Maven 仓库
您可以为需要身份验证的 Maven 仓库指定凭据。有关身份验证选项,请参阅支持的仓库协议。
本地 Maven 仓库
Gradle 可以从本地 Maven 仓库(即本地文件系统上的仓库)使用依赖。
Kotlin
Groovy
repositories {
maven {
url = uri(layout.buildDirectory.dir("repo"))
}
}
Gradle 可以从本地 Maven 仓库使用依赖。这对于希望在本地测试其设置,然后再发布其插件的团队非常有用。
在将 mavenLocal()
添加到构建脚本之前,您应确保使用本地 Maven 仓库是必要的
Kotlin
Groovy
repositories {
mavenLocal()
}
即使您从远程 Maven 仓库解析依赖,Gradle 也会管理自己的缓存,而无需声明本地 Maven 仓库。 |
Gradle 使用与 Maven 相同的逻辑来识别本地 Maven 缓存的位置。如果在用户的 home 目录 (~/.m2/settings.xml
) 中定义了 settings.xml 文件,则此位置优先于 M2_HOME/conf
。否则,Gradle 默认使用 ~/.m2/repository
。
作为一般建议,请避免使用 mavenLocal() 。与 Maven 构建不同,Gradle 可以使用项目依赖在项目之间共享工件。对于在项目之间共享工件,无需发布到本地 maven 仓库。 |
Ivy 仓库
许多组织在 Ivy 仓库中托管依赖。
标准布局 Ivy 仓库
要声明具有标准布局的 Ivy 仓库,只需指定 URL 即可
Kotlin
Groovy
repositories {
ivy {
url = uri("http://repo.mycompany.com/repo")
}
}
命名布局 Ivy 仓库
您可以指定您的仓库遵循 Ivy 默认布局
Kotlin
Groovy
repositories {
ivy {
url = uri("http://repo.mycompany.com/repo")
layout("maven")
}
}
有效的命名布局值包括 gradle
(默认)、maven
和 ivy
。有关更多详细信息,请参阅 API 文档中的 IvyArtifactRepository.layout(java.lang.String)。
自定义模式布局 Ivy 仓库
要定义具有非标准布局的 Ivy 仓库,您可以设置模式布局
Kotlin
Groovy
repositories {
ivy {
url = uri("http://repo.mycompany.com/repo")
patternLayout {
artifact("[module]/[revision]/[type]/[artifact].[ext]")
}
}
}
对于从不同位置获取 Ivy 文件和工件的 Ivy 仓库,请定义单独的模式
Kotlin
Groovy
repositories {
ivy {
url = uri("http://repo.mycompany.com/repo")
patternLayout {
artifact("3rd-party-artifacts/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]")
artifact("company-artifacts/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]")
ivy("ivy-files/[organisation]/[module]/[revision]/ivy.xml")
}
}
}
(可选)您可以为“组织”部分启用 Maven 样式布局,其中正斜杠替换点号
Kotlin
Groovy
repositories {
ivy {
url = uri("http://repo.mycompany.com/repo")
patternLayout {
artifact("[organisation]/[module]/[revision]/[artifact]-[revision].[ext]")
setM2compatible(true)
}
}
}
身份验证的 Ivy 仓库
您可以为需要身份验证的 Ivy 仓库指定凭据。有关身份验证选项,请参阅支持的仓库协议。
本地 Ivy 仓库
Gradle 可以从本地 Ivy 仓库(即本地文件系统上的仓库)使用依赖
Kotlin
Groovy
repositories {
ivy {
// URL can refer to a local directory
url = uri("../local-repo")
}
}
扁平目录仓库
有些项目将依赖项存储在共享驱动器或项目源代码中,而不是使用二进制仓库。要使用扁平文件系统目录作为仓库,您可以像这样配置它
Kotlin
Groovy
repositories {
flatDir {
dirs("lib")
}
flatDir {
dirs("lib1", "lib2")
}
}
此配置添加了在指定目录中搜索依赖项的仓库。
不建议使用扁平目录仓库,因为它们不支持 Ivy XML 或 Maven POM 文件等元数据格式。 |
通常,二进制依赖项应来自外部仓库,但如果外部存储依赖项不是一种选择,则最好使用本地文件 URL 声明 Maven 或 Ivy 仓库。
从扁平目录仓库解析依赖项时,Gradle 会根据工件的存在动态生成临时依赖项元数据。Gradle 优先选择具有真实元数据的模块,而不是扁平目录仓库生成的模块。因此,扁平目录无法覆盖来自其他声明仓库的具有真实元数据的工件。
例如,如果 Gradle 在扁平目录中找到 jmxri-1.2.1.jar
,而在另一个仓库中找到 jmxri-1.2.1.pom
,它将使用后者的元数据。