Gradle之恋(10)-依赖管理2

三天的小长假,正直“满街杨柳绿如烟,划出清明三月天”。首先祝大家出门踏青玩得开心、在家休息得惬意。

概述

继上文,依赖管理的话题分为两个层面的含义:把需要的依赖加入项目的class path以便顺利地构建项目;把项目构建成其他项目的依赖,发布出去。本文就来研究下仓库。
Gradle

Gradle的仓库管理是基于自由且灵活的Apache Ivy,而且Gradle对其扩展,提供了很多便利的方法来增强预配置。
你可以配置任意多个仓库,每个仓库都是独立的。Gradle如果在某个仓库发现了该模块的描述文件(如ivy.xml、pom.xml)就尝试在这个仓库下载该模块及其所有依赖。Gradle可以使用的仓库有

  • Maven central repository - 内(预)置的maven中央仓库
  • Maven JCenter repository - 内置的JCenter仓库
  • Maven local repository - 内置的maven本地仓库
  • Maven repository - 自定义的maven仓库,可以是本地文件系统或远程仓库
  • Ivy repository - 自定义的Ivy仓库,可以是本地文件系统或远程仓库
  • Flat directory repository - 简单的本地文件系统,不包括任何元数据(meta-data)

Maven中央仓库

添加Maven2仓库,只需要简单修改你的build script:

//build.gradle
repositories {
mavenCentral()
}

现在Gradle将在Maven中央仓库查询和下载依赖。

JCenter仓库

JCenter是目前最受欢迎的Maven OSS构件库,使用JCenter只需要向build script添加:

repositories {
jcenter()
}

JCenter默认使用HTTPS来访问,可以配置为HTTP协议

repositories {
jcenter {
url "http://jcenter.bintray.com/"
}
}

Local Maven repository

使用Maven的本地缓存作为仓库,你可以配置

repositories {
mavenLocal()
}

Gradle使用访问Maven远程仓库同样的逻辑来使用本地仓库。如果有settings.xml配置文件,将使用配置文件中的本地缓存,当然USER_HOME/.m2/settings.xml优先于M2_HOME/conf/settings.xml;如果没有settings.xml,Gradle将默认使用USER_HOME/.m2/repository缓存。

Maven repositories

使用自定义的Maven仓库,你可以配置

repositories {
maven {
url "http://repo.mycompany.com/maven2"
}
}

有时依赖的pom和jar以及构建发布不在同一位置,此种情况你需要指定

repositories {
maven {
// 查询pom、构件以及jar
url "http://repo2.mycompany.com/maven2"
// 如果在上面没查到,将在这里查询构件以及jar
artifactUrls "http://repo.mycompany.com/jars"
artifactUrls "http://repo.mycompany.com/jars2"
}
}

有些Maven仓库为了防止直接暴露,可能会要求用户认证,可以指定用户名和密码来配置

repositories {
maven {
credentials {
username 'user'
password 'password'
}
url "http://repo.mycompany.com/maven2"
}
}

为了方便安全简洁,通常把用户名和密码放在gradle.properties而不是直接放在build script中。

Flat directory repository

使用文件系统作为仓库也非常简单易行

repositories {
flatDir {
dirs 'lib'
}
flatDir {
dirs 'lib1', 'lib2'
}
}

这样Gradle就会在多个目录仓库寻找依赖,但这种方式不支持任何元数据(meta-data)如ivy.xml、pom.xml等,而Gradle会动态地生成依赖描述文件。
Gradle喜欢那些带有依赖描述的模块,而不喜欢自动生成的,因此文件仓库一般都作为Gradle的末选。比如Gradle在文件仓库中发现了jmxri-1.2.1.jar,而在另一个仓库中发现了jmxri-1.2.1.pom,Gradle则选择后者仓库下载依赖。

Ivy repositories

使用Ivy仓库也非常简单

repositories {
ivy {
url 'http://repo.mycompany.com'
credentials {
username 'user'
password 'password'
}
}
}

协议支持

Ivy和Maven都支持如下协议和认证
协议支持

repositories {
maven {
url "http://repo.mycompany.com/maven2"
}

ivy {
url "http://repo.mycompany.com/repo"
}
}

repositories {
maven {
url "sftp://repo.mycompany.com:22/maven2"
credentials {
username 'user'
password 'password'
}
}

ivy {
url "sftp://repo.mycompany.com:22/repo"
credentials {
username 'user'
password 'password'
}
}
}
repositories {
maven {
url "s3://myCompanyBucket/maven2"
credentials(AwsCredentials) {
accessKey "someKey"
secretKey "someSecret"
// 可选
sessionToken "someSTSToken"
}
}

ivy {
url "s3://myCompanyBucket/ivyrepo"
credentials(AwsCredentials) {
accessKey "someKey"
secretKey "someSecret"
// 可选
sessionToken "someSTSToken"
}
}
}
翟前锋 wechat
欢迎订阅我的微信公众号:zhaiqianfeng!