1. 程式人生 > >Maven 私有倉庫搭建

Maven 私有倉庫搭建

筆者曾經不思量力的思考過『是什麼推動了網際網路技術的快速發展?』這種偉大的命題。結論是,除了摩爾定律之外,技術經驗的快速積累和廣泛分享,也是重要的原因。

有人戲稱,『寫 Java,首先要學會選包』,在這裡不好評論對錯。不過這句話裡面,至少包含兩層意思:首先 Java 有大量的現成的依賴包,不必要自己造輪子;其次,Java 的包存放較為集中,整合方式也方便。

筆者從事 Android 和 Java 開發以來,經歷了幾個階段:

閉門造輪子 > 使用別人的輪子 > 開門造輪子 > 分享輪子

在使用、創造、分享輪子的過程中,maven 倉庫的使用可謂必備技能。

相信各位使用 Android Studio,對於 jcenter()mavenCentral() 等概念應該是司空見慣了。程式設計師要知其然,知其所以然。本篇將按照如下脈絡介紹在 Android Studio 中 Maven 倉庫相關的概念和應用。

  • Maven 包
  • Maven 倉庫
  • 釋出包到本地倉庫
  • 釋出包到 Bintray Jcenter 遠端倉庫
  • 釋出包到 Sonatype MavenCentral 遠端倉庫
  • 搭建私有 Sonatype 倉庫
  • 搭建私有 Artifacotory 倉庫

Maven 包(Package)

對於 Android 開發者而言,只需要知道 Maven 是一種構建工具,Maven 包是由所謂 POM(Project Object Model)所定義的檔案包格式即可。

Gradle 可以使用 Maven 包,而且大部分的 Android 能夠使用的遠端依賴包都是 Maven 包。

先來看一個託管在某倉庫上的 Maven 包:Bugtags-Android-Lib 所包含的內容:

1
2
3
4
5
6
7
8
bugtags-lib-1.1.0-javadoc.jar//javadoc 檔案
bugtags-lib-1.1.0-javadoc.jar.asc//javadoc 檔案的簽名
bugtags-lib-1.1.0-sources.jar//原始碼檔案
bugtags-lib-1.1.0-sources.jar.asc//原始碼檔案的簽名
bugtags-lib-1.1.0.aar//Android Library 的主檔案包 bugtags-lib-1.1.0.aar.asc//主檔案包的簽名 bugtags-lib-1.1.0.pom//包描述檔案 bugtags-lib-1.1.0.pom.asc//描述檔案的簽名

對於一個合符規範的 Maven Package,pom 檔案、aar(或者 jar) 檔案是必須的。

而 javadoc 檔案、原始碼檔案、簽名檔案都不是必要的,但是某些公開倉庫(如 mavenCentral )有此要求。

使用這個包的方式,相信大家已經很熟悉了:

1
2
3
dependencies {
    compile 'com.bugtags.library:bugtags-lib:1.1.0'
}

POM 檔案

一個 Maven Package,最重要就是 POM(Project Object Model) 檔案,這其實是一個 XML 檔案,這裡擷取 Bugtags-Android-Lib POM 主要內容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.bugtags.library</groupId>
  <artifactId>bugtags-lib</artifactId>
  <version>1.1.0</version>
  <packaging>aar</packaging>
  <dependencies>
    <dependency>
      <groupId>com.android.support</groupId>
      <artifactId>support-v4</artifactId>
      <version>19.0.0</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
</project>
  • modelVersion: 從 mvn 2.x 起,這個數值都是4.0.0
  • packaging:打包方式,aar 是 Android Libirary 的打包方式,常用的還有 jar
  • dependency:宣告依賴列表
  • 包的唯一標示:

    1
    2
    3
    4
    5
    6
    
    <!--包組 id,通常是釋出者擁有的域名的反向,以免跟別人的重複-->
    <groupId>com.bugtags.library</groupId>
    <!--包 artifactId,不好意思我也不知道如何準確翻譯,其實就是組以下應該有一個更小的歸類-->
    <artifactId>bugtags-lib</artifactId>
    <!--包版本-->
    <version>1.1.0</version>
    

    其中三個欄位與 Gradle 的依賴格式 'com.bugtags.library:bugtags-lib:1.1.0' 冒號分割的三段一一對應。這就解釋了所謂的 Gradle 相容 Maven 包

Maven 倉庫

Maven 包集中存放的地方,就是 Maven 倉庫。這些倉庫,可以是放在本地,也可以放在某個遠端伺服器上。 可以是私有倉庫,也可以是公開的。下面是筆者日常開發用的庫列表:

1
2
3
4
5
6
7
8
mavenCentral();
jcenter()
maven {
     url 'file:///Users/my-user-name/Documents/Android/repo/'
}
maven {
     url 'http://192.168.99.100:8081/content/repositories/releases/'
}

Android Studio Gradle 主要支援兩個 Maven 中央庫:mavenCentral 和 jcenter

  • mavenCentral 是最早的 maven 中央倉庫
  • jcenter 是 Android Studio 0.8 版本起的預設 maven 中央倉庫
  • 第三個是筆者的本機的倉庫
  • 第四個是筆者部署在內網伺服器的私有倉庫

讀者可能會發現兩個問題:

  • 為什麼有了 mavenCentral,谷歌還切換到了 jcenter?
  • maven { url : xxx},這種格式可以配置任何一個存在的倉庫?

解釋如下:

jcenter VS. mavenCentral

根據這篇部落格,jcenter 具有如下優勝特點,使得谷歌進行切換:

  • jcenter 是一個 mavenCentral 的超集,jcenter 還包含了其他 maven 包
  • jcenter 具有更好的 cdn,預設支援 https,這個對於谷歌有巨大吸引力
  • bintray(jcenter 的服務提供商)表示 jcenter 具有更好的效能
  • 有資料表明 bintray jcenter 佔用更少的本地快取空間
  • 更好的互動介面,可以從 jcenter 向 mavenCentral 同步包(下面兩個平臺的使用教程將會證實這一點)

筆者親測,在 bintray 上釋出包到 jcenter 在易用性上的確比 在 sonatype 釋出到到 mavenCentral 要好得多。

使用符合規範的 maven 倉庫

沒錯,你可以通過 maven { url : xxx }使用任何一個符合 maven 規範的倉庫。

  • 相關推薦

    Maven 私有倉庫搭建

    筆者曾經不思量力的思考過『是什麼推動了網際網路技術的快速發展?』這種偉大的命題。結論是,除了摩爾定律之外,技術經驗的快速積累和廣泛分享,也是重要的原因。 有人戲稱,『寫 Java,首先要學會選包』,在這裡不好評論對錯。不過這句話裡面,至少包含兩層意思:首先 Ja

    通過Nexus搭建maven私有倉庫,並通過gradle上傳jar

    pre install oss 通過 epo 選擇 配置 容器 ffffff 安裝nexus 安裝docker``·bashyum install docker-ce 拉取鏡 docker pull registry.docker-cn.com/sonatype/nex

    實戰maven私有倉庫三部曲之一:搭建和使用

    在區域網內搭建maven私有倉庫,可避免每次都從中央倉庫下載公共jar包,另外將A模組作為二方庫釋出到私有倉庫後,B模組可以很方便的引用,今天我們就來實戰maven私有倉庫的搭建和使用; 環境資訊 安裝私有倉庫的機器是ubuntu16,IP是192.1

    Maven】Nexus3搭建Maven私有倉庫及使用

    Maven庫 remote repository:相當於公共的倉庫,大家都能訪問到,一般可以用URL的形式訪問 local repository:存放在本地磁碟的一個資料夾,例如,windows上預設是C:\Users\{使用者名稱}\.m2\repository目錄 R

    CentOS 初體驗十六:阿里雲安裝Nexus搭建Maven私有倉庫

    簡介 mavenCentral 是最早的 maven 中央倉庫。 私有伺服器,是公司內部 Maven 專案經常需要的,Nexus 是常用的私用 Maven 伺服器, Nexus 被超過10萬個開發團隊所使用。 本次搭建私有倉庫用的是阿里雲伺服器,系

    Docker學習之搭建maven私有倉庫

    2018-05-21 07:00:00,772+0000 INFO  [quartz-5-thread-1] *SYSTEM org.sonatype.nexus.quartz.internal.task.QuartzTaskInfo - Task 'Storage facet cleanup' [repos

    Nexus 搭建maven 私有倉庫

    nexus 如果沒有私服,我們所需的所有構件都需要通過maven的中央倉庫和第三方的Maven倉庫下載到本地,而一個團隊中的所有人都重複的從maven倉庫下載構件無疑加大了倉庫的負載和浪費了外網頻寬,如果網速慢的話,還會影響專案的程序。很多情況下專案的開發都是在內網進行的

    Nexus 3.x 搭建本地 Maven 私有倉庫

    本文首發於我的部落格,歡迎訪問 官方介紹: The free artifact repository with universal support for popular formats. 10 million developers

    Docker--------registry私有倉庫搭建 [ Http ]

    registry docker docker hub 1. 背景 docker中要使用鏡像,一般會從本地、docker Hup公共倉庫和其它第三方公共倉庫中下載鏡像,一般出於安全和外網(墻)資源下載速率的原因考慮企業級上不會輕易使用。那麽有沒有一種辦法可以存儲自己的鏡像的倉庫呢? ----&

    Docker私有倉庫搭建

    docker 私有倉庫 由於公有倉庫有時連接會出現超時,下載速度慢等情況故搭建私有倉庫鏡像server端可以login官方的Doker Hub,可以pull,push和私有倉庫但client只能操作自己搭建的倉庫server 192.168.127.142client 192.168.1

    docker-ce私有倉庫搭建

    -i kernel perf process fault 系統 status secure nco 說明:本文中私有倉庫的ip地址為10.10.172.203:5000,操作系統為CentOS7.2;服務端:10.10.172.203/241、從Docker官方倉庫裏下載r

    Spring Boot 多模塊與 Maven 私有倉庫

    .project date content reporting pts fin plugin cond ssl 前言 系統復雜了,抽離單一職責的模塊幾乎是必須的;若需維護多個項目,抽離公用包上傳私有倉庫管理也幾乎是必須的。其優點無需贅述,以下將記錄操作過程。 1. 多模塊

    CentOS 7 : Docker私有倉庫搭建和使用

    docker reg expect use 啟動 倉庫 AR 通過 sel 系統環境: CentOS 7.2 192.168.0.179:docker倉庫 192.168.0.60:客戶端 安裝並啟動docker yum -y install docker system

    Centos7 Docker私有倉庫搭建

    Centos7 Docker私有倉庫搭建Centos7 Docker私有倉庫搭建 倉庫:集中存放鏡像的地方,可分為公共倉庫和私有倉庫(公共倉庫"http://hub.docker.com"或國內的"http://www.daocloud.io") 註冊服務器才是存放倉庫具體的服務器

    Docker 私有倉庫搭建

    down mark xen eric minutes ont gist epo man 我們在使用Docker時 下載鏡像一般都是在外網下載並使用。可是當我們沒有外網時我們不得不自己搭建私有倉庫。先看下流程圖: 下面我們開始搭建 私有倉庫1、安裝docker,並設置為開機自

    Docker 私有倉庫搭建

    訪問 本地 nginx 技術分享 director int 引用 dig ani 轉自:https://www.cnblogs.com/Tempted/p/7768694.html 環境準備 環境:兩個裝有Docker 17.09.0-ce 的centos7虛擬機 虛擬機一

    【新功能】企業級Maven私有倉庫服務結束公測,全面開放使用

    6.2 add ecn 方式 courier 設置 ask 創建 maven 摘要: 目前雲效上線了企業級Maven私有倉庫服務。用戶可以一鍵開通Maven私有倉庫服務,零配置實現私有二方庫的上傳和下載。經過半個月的公測,雲效中的企業級Maven私有倉庫服務正式上線,全面開

    Docker 18.03私有倉庫搭建

    外網 repos shadow iges -o test rime mct ted 我們在使用Docker時 下載鏡像一般都是在外網下載並使用。可是當我們沒有外網時我們不得不自己搭建私有倉庫。流程圖:docker 版本[root@docker ~]# docker vers

    Docker 之 私有倉庫搭建

    問題 很多 過程 load images fig.yml 實現 添加 接口 1 概述本文將介紹兩種方法搭建docker私有倉庫:基於docker-distribution 和 基於 harbor 搭建2 基於docker-distribution 的搭建docker

    Docker 鏡像創建、私有倉庫搭建和數據管理

    naconda 清除緩存 pro 管理操作 med recreate 環境變量 rom down Docker 鏡像的創建方法 Docker 鏡像除了是 Docker 的核心技術之外也是應用發布的標準格式。一個完整的 Docker 鏡像可以支撐一個 Docker 容器的運