简介
在Android开发中,尤其是使用Android Studio开发过程中,我们可以看到在module中的build.gradle文件中compile许多其他开源库,这些开源库其实都是从maven仓库中下载下来的。
本篇文章主要弄清楚maven仓库相关的一些概念。
maven仓库
- 何为maven仓库?
所谓maven仓库,其实简单来说就是存放一些代码的地方,当我们自己编写的代码需要调用到某些开源库或非开源库的api的时候,只需要通过一定的规则将maven仓库的代码拉去到我们本地即可。
如果给maven仓库进行分类,大致可以分为两类,即:本地仓库和远程仓库。通常我们在编译程序时都是先从本地仓库中查找对应的依赖文件,如果没有查找到再从远程仓库中查找。
- 何为本地仓库?
本地仓库即指的是本机中的仓库,默认情况下,本地仓库的位置位于用户目录下的.m2/repository/的仓库目录。
默认本地路径方式如下:
repositories {
mavenLocal()
}
当然我们也可以自定义本地路径,例如如下:
repositories {
maven { url 'D://Users/.m2/repository' }
}
- 何为远程仓库?
远程仓库是相对本地仓库来说的,意思就是相关代码是放在远程服务器上的。远程仓库又分为中央仓库、私服和其他公共库。
Android中有两个标准的仓库:jcenter 和 Maven Central,这两者就属于中央仓库。通常我们的依赖方式如下:
allprojects { repositories { jcenter() mavenCentral() } }
mavenCentral
maven中央仓库(http://repo1.maven.org/maven2/)是由Sonatype公司提供的服务,它是Apache Maven、SBT和其他构建系统的默认仓库。
JCenter
JCenter仓库(https://jcenter.bintray.com )是由JFrog公司提供的Bintray中的Java仓库。它是当前世界上最大的Java和Android开源软件构件仓库。 所有内容都通过内容分发网络(CDN)使用加密https连接获取。JCenter是Goovy Grape内的默认仓库。
JCenter相比mavenCenter构件更多,性能也更好。但还是有些构件仅存在mavenCenter中。
- 为何会有两个标准的仓库?
事实上两个仓库都具有相同的使命:提供Java或者Android library服务。上传到哪个(或者都上传)取决于开发者。
起初,Android Studio 选择Maven Central作为默认仓库。如果你使用老版本的Android Studio创建一个新项目,mavenCentral()会自动的定义在build.gradle中。
但是Maven Central的最大问题是对开发者不够友好。上传library异常困难。上传上去的开发者都是某种程度的极客。同时还因为诸如安全方面的其他原因,Android Studio团队决定把默认的仓库替换成jcenter。正如你看到的,一旦使用最新版本的Android Studio创建一个项目,jcenter()自动被定义,而不是mavenCentral()。
- 讲完了两大中央仓库,那 Maven 私服又是什么意思呢?
如果将我们的代码发布到中央仓库,那么任何开发者都是可以使用的,那通常情况下一个公司或个人(尤其是公司)不可能将自己的代码发布到中央仓库的,这就产生了私服,也就是在自己的服务器上搭建一个私有仓库。
- 那如何搭建自己的代码仓库呢?
这就需要了解Nexus了,Nexus是一个基于maven的仓库管理的社区项目.主要的使用场景就是可以在局域网搭建一个maven私服,用来部署自己的代码库,当然也可以将第三方的jar/aar部署到Nexus上进行统一管理。
Nexus如何进行搭建此处不再讲解,网上有许多文档做了详细的讲解。
参考文献
https://blog.csdn.net/lu_xin_/article/details/51134849
https://blog.csdn.net/wangdong5678999/article/details/72835539