maven仓库简介

1. 什么是Maven

Maven是一个基于项目对象模型(POM)的项目管理工具。所有的Maven项目都会包含一个pom.xml的文件,里面通过一些字段标识坐标和依赖,即其他项目如何找到我和我都依赖什么项目,一个常见的pom.xml文件结构如下:

<project xmlns="http://maven.apache.org/POM/4.0.0"
   <groupId>com.yiibai.project-group</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
   </dependency>
<project>

一个pom文件必须包含groupId、artifactId、version三个字段,这个三个字段就可以构成项目的坐标,常见节点含义如下:

节点 描述
groupId 项目组编号,通常以公司域名倒序,例如com.sina.mobile,通常这个组织是独一无二的
artifactId 项目编号,主要用来描述当前项目
version 当前项目的版本号
dependency 当前项目依赖的其他项目

我们在github上找到gson,它的文档里写了引用gson的方法如下,我们可以发现就是通过这三个节点来定位到gson库的。


2. Maven Central和jcenter

一个Maven项目构建后的输出或者所依赖的,我们可以称作构件或者库,集中存储这些构件的地方叫做Maven仓库。Maven仓库分为本地仓库和远程仓库,当Maven使用一个构建时,先在本地仓库中寻找,如果找不到,再去远程仓库寻找。

  • 本地仓库 默认地址为~/.m2/, 一个构件只有在本地仓库存在之后, 才能由Maven项目使用。因为Android项目不属于Maven项目,所以通常没有本地仓库,但是它会有本地缓存,在~/.gradle/caches/modules-2/files-2.1目录下面。当然也可以给Android项目指定本地仓库,我前面的文章Gradle in action 2.4节讲gradle插件时,里面的插件发布和引用都是到本地仓库。
  • 远程仓库 远程仓库分为中央仓库和私库,中央仓库是一些公司或开源组织提供的全球所有用户都能使用的仓库,私库是局域网或者指定组织才能使用的仓库。很多公司都搭有自己的私库,当用户想私库请求一个构件,私库中不存在,它通常会先去中央仓库请求,然后缓存下来再为用户提供下载。

目前最常用的maven中央仓库为Maven Central和jcenter。
Maven Central是由sonatype.org维护的Maven仓库,它是很多机构默认的中央仓库,早期Android项目默认的仓库也是Maven Central。在android项目中指定Maven Central需要在根目录的build.gradle中加入如下代码:

repositories {
    mavenCentral()
}

可在后面两个地址浏览所有仓库构件: https://repo1.maven.org/maven2/https://oss.sonatype.org/content/repositories/releases/ ,也可在http://search.maven.org/ 直接搜索构件。

jcenter是由JFrog公司提供的中央仓库,现在是Android项目默认的仓库,我们新建一个Android项目时在build.gradle中能看到

repositories {
     jcenter()
}

在我写文章时这个网站(https://jcenter.bintray.com) 打开可以浏览构件,只有登录后才能搜索构件,跟我之前看到的有些不同。目前Android项目默认仓库是jcenter,目前普遍观点jcenter比maven central好一些,这些观点主要来自于JFrog官网和Android迁移到jcenter时的一个通告博客

  • jcenter通告CDN发布;
  • 支持https;
  • jcenter是目前最大的仓库,是maven central的超集;
  • jcenter有更友好的UI,并且易于用户上传构件。

当然我们也可以使用特定的Maven服务器,类似于:

repositories {
    maven { url 'https://maven.fabric.io/public' }
}

还有一些公司的开源库放到自己的仓库维护,例如android的兼容库,在jcenter中是找不到的,但是在google的仓库中是可以找到,地址是https://maven.google.com/,可以gradle中配置google()即可。Facebook的RN库,从2.0以后的版本也没有放到公共仓库中了,通过node构建RN项目时,它会下载到node_module中的本地仓库

3. 如何发布自己的aar库到中央仓库

上面提到了两个中央仓库,我们可以把我们自己的构建发布到这两个仓库。jcenter是超集,所以只需要发布到maven central,构件会自动同步到jcenter上的。同样,我们发布到jcenter上面的库也可以同步到maven central,不过要手动去同步。
后面一篇文章我会介绍如何发布构件到中央仓库

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容