Android之maven 仓库,maven Central,JCenter及Nexus 私服之间关系

简介

在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

https://www.jianshu.com/p/cff4684803f3

发布了74 篇原创文章 · 获赞 17 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/u010349644/article/details/84715076