03.18 Gradle学习记录013 仓库的种类

学习取得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协议很复杂,一般也不会用到。所以不做记录。


分享到:


相關文章: