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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章