学习取得Gradle依赖模块的仓库种类。该学习记录基于Gradle官方网站资料。本篇参考链接如下:
https://docs.gradle.org/current/userguide/repository_types.html
水平仓库(flat repository)
水平仓库通常指向本地的某一个或者某几个文件夹。如:
repositories {
flatDir {
dirs 'lib'
}
flatDir {
dirs 'lib1', 'lib2'
}
}
Gradle会去定义在flatDir内的文件夹寻找所需的依赖。但是这种仓库不支持任何metadata,像ivy XML或者maven pom。例如:Gradle在水平仓库中找到jmxri-1.2.1.jar,但是在另外一个非水平仓库中找到了jmxri-1.2.1.pom,它就会使用后者。
Maven仓库(Maven central repository)
Maven仓库是最常用的仓库, 声明方法如下:
repositories {
mavenCentral()
}
JCenter仓库(JCenter Maven repository)
JCenter仓库保存了最新版的java开源资源。声明方法如下:
repositories {
jcenter()
}
Google仓库(Groogle Maven repository)
repositories {
google()
}
本地Maven仓库
repositories {
mavenLocal()
}
默认的本地Maven仓库所在位置是USER_HOME/.m2/repository,如果想自定义位置有两个settings.xml文件可以利用。USER_HOME/.m2内的settings.xml内的定义优先于M2_HOME/conf.内的settings.xml。
自定义Maven仓库(custom Maven repository)
有时候因为网络问题, 无法直接访问Maven Center repository。如果是公司网络环境,公司可能会提供一个跳板去简介访问。那么跳板的url就可以通过自定义Maven仓库来设置:
repositories {
maven {
url "http://repo.mycompany.com/maven2"
}
}
有的时候工程构建可能需要参照不同位置的Maven仓库资源:
repositories {
maven {
// 查找 POMs和资源
url "http://repo2.mycompany.com/maven2"
// 如果url中没有找到资源,那么到下面的位置寻找
artifactUrls "http://repo.mycompany.com/jars"
artifactUrls "http://repo.mycompany.com/jars2"
}
}
自定义Ivy仓库(custom Ivy repository)
个人一般不使用Ivy仓库,所以不做记录
支持元数据(metadata)
是maven仓库的时候,Gradle会去查找.pom文件。水平仓库的时候,不会查找metadata文件而是会去查找.jar文件。有时候自定的maven仓库中并没有metadata元数据文件,那么可以使用metadataSources 方法,把配置metadata的工作交给Gradle。
repositories {
maven {
url "http://repo.mycompany.com/repo"
metadataSources {
mavenPom()
artifact()
}
}
}
※个人感觉是通过metadataSources方式来让Gradle自动管理metadata。但是官网的说明是查找metadata,感到难以理解。好在暂时不是特别重要的问题。
支持仓库传输协议
Gradle的仓库支持多种传输协议,常用的有以下几种
- 文件 无需认证信息
- http 用户名/密码
- https 用户名/密码
- sftp 用户名/密码
- s3 密钥
- gcs 系统参数
注意,用户名密码最好定义在Gradle.properties文件中,并且引入认证用插件对其进行加密。另外,s3协议为亚马逊提供,全称是Amazon Simple Storage Service。gcs是Google提供。
Http协议
repositories {
maven {
url "http://repo.mycompany.com/maven2"
}
ivy {
url "http://repo.mycompany.com/repo"
}
}
SFtp协议
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"
}
}
}
s3协议
repositories {
maven {
url "s3://myCompanyBucket/maven2"
credentials(AwsCredentials) {
accessKey "someKey"
secretKey "someSecret"
// optional
sessionToken "someSTSToken"
}
}
ivy {
url "s3://myCompanyBucket/ivyrepo"
credentials(AwsCredentials) {
accessKey "someKey"
secretKey "someSecret"
// optional
sessionToken "someSTSToken"
}
}
}
gsc协议很复杂,一般也不会用到。所以不做记录。
閱讀更多 一個經驗用十年的碼農 的文章