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

自建私有 Maven 倉庫

專案組從2015年上半年全面切換到 AndroidStudio 進行開發,隨著這1年多業務邏輯和程式碼邏輯的增長,導致專案 LibraryModule 由最初的3個增長到如今的8個。

程式碼量的增加必然導致編譯的變慢,AndroidStudio 在編譯專案時會先編譯 LibraryModule 生成 aar 包,之後這些 aar 包會和 APPModule 進行整合編譯,最終生成 APK。這個編譯過程,第一次在5.0及以上手機安裝,經常會出現6分鐘以上的編譯時間,5.0以下手機也有3分鐘左右的編譯時間,這些時間嚴重影響了工作效率!

考慮到 LibraryModule 是長期不會修改的程式碼,如果釋出成 aar 加入到專案裡,就可以節省下每次 Module 編譯的時間。

如果能夠像 compile 第三方 Library 那樣引用我們的 Library ,豈不是又降低 Module 的耦合,又單獨對 Library 增加了版本控制。第三方 Library 基本都是把 aar 釋出到中央 Maven 對外提供引用,而我們的 Library 作為公司的商業專案,是不可能釋出到中央 Maven 對外提供引用的,這就要求我們需要有自己的 Maven 服務。

私有 Maven 還會產生另一個好處,就是代理中央 Maven 倉庫。例如,我們新加入了一個第三方庫,導致每個人的 IDE 都需要從中央 Maven pull 庫,而中國 GFW 的存在,導致中央 Maven 極其不穩定,經常 time out ,有了代理 Maven,只要代理 maven pull 一次庫,每個人就不必從中央 Maven pull庫了。

這裡我們是用 Docker 作為容器,在裡面搭建的 Sonatype Nexus 私有 Maven 倉庫。使用 Docker 的好處是可以把環境獨立出來不會和伺服器其他服務產生衝突,解除安裝也簡單。

安裝 Docker 並執行 Nexus

1,下載 並安裝 Docker,傳送門

2,在 Terminal 中輸入docker -v,如果顯示版本號,說明安裝後環境是沒有問題的,如下是我顯示的版本號:
Docker version 1.12.0, build 8eab29e

3,在 Terminal 輸入docker pull sonatype/nexus進行下載 nexus 映象。
下載過程中,會顯示下載進度。如果比較慢或者超時,請在 Docker 裡設定 mirror。如下圖,我配置了靈雀加速和阿里雲加速。

下載成功後顯示如下圖:

4,在 Terminal 中輸入docker run -d -p 8081:8081 --name yiche sonatype/nexus:oss來建立一個名叫 yiche 的容器,佔用埠8081。

這裡寫圖片描述

5,在 Terminal 中輸入docker ps -a檢視容器

這裡寫圖片描述

這裡寫圖片描述

7,一些常用指令:
docker start yiche開始執行yiche 容器
docker restart yichec運 重新行yiche容器
docker stop yiche停止執行yiche容器
docker rm yiche刪除yiche容器

Nexus 使用

點選右上角login登入,預設賬戶admin,預設密碼admin123

點選左側欄目的Repositories,顯示Nexus 預設已經有的倉庫,如下圖:

這裡寫圖片描述

建立一個私有倉庫

1,點選add,選擇Hosted Repository

2,在下方輸入Repository IDRepository Name,這裡我分別輸入的是demoDemo,這裡可以換成你自己的。

3,部署策略Deployment Policy選擇為Allow Redeploy允許重新部署。

4,點選save儲存,在上方列表中就會顯示完成的倉庫資訊,最後一列Repository Path就是倉庫的地址。

如下圖:
這裡寫圖片描述

注:如果在Repository Policy選擇snapshot,倉庫就是快照版倉庫。

代理倉庫

這裡我是代理的 jcenter,因為這是 Android Studio 的預設倉庫。

1,點選add,選擇Proxy Repository

2,在下方輸入Repository IDRepository Name,這裡我分別輸入的是jcenterJcenter,因為代理的就是 jcenter 哈。

3,在Remote Storage Location輸入代理倉庫的倉庫地址http://jcenter.bintray.com/

4,點選save儲存,在上方列表中就會顯示完成的倉庫資訊,最後一列Repository Path就是倉庫的地址。

如下圖:
這裡寫圖片描述

其實在我們專案裡並沒有新建立一個倉庫,而是直接用的預設ReleaseSnapshot

這裡寫圖片描述

Android Studio 中上傳 Library Module 到私有 maven

上傳到 Maven

因為,Module比較多,我在專案根目錄裡寫了一個 gradle 檔案gradle_mvn_push.gradle來上傳。程式碼如下:

apply plugin: 'maven'
//release 地址
def RELEASE_REPOSITORY_URL = "http://192.168.4.53:32770/content/repositories/releases/"
//snapshots 地址
def SNAPSHOT_REPOSITORY_URL = "http://192.168.4.53:32770/content/repositories/snapshots/"
//判斷 VERSION_NAME 如果以`-SHAPSHOT`結尾,則上傳地址為 snapshot 地址
def REPOSITORY_URL = VERSION_NAME.endsWith("-SNAPSHOT") ? SNAPSHOT_REPOSITORY_URL : RELEASE_REPOSITORY_URL;

logger.info("groupId = %s\t\nartifactId = %s\t\nversion = %s\t\nrepository = %s\t\n", GROUP, POM_ARTIFACT_ID, VERSION_NAME, REPOSITORY_URL)

afterEvaluate { project ->
    uploadArchives {
        repositories.mavenDeployer {
            pom.groupId = GROUP
            pom.artifactId = POM_ARTIFACT_ID
            pom.version = VERSION_NAME
            repository(url: REPOSITORY_URL) {
                authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
            }
        }
    }
    task androidSourcesJar(type: Jar) {
        classifier = 'sources'
        from android.sourceSets.main.java.sourceFiles
    }

    artifacts {
        archives androidSourcesJar
    }
}

然後在你要上傳 module 的build.gradle 檔案引入。
如下圖是我們換膚 Module 的 build.gradle

apply plugin: 'com.android.library'

android {
    compileSdkVersion Integer.valueOf(COMPILE_SDK_VERSION)
    buildToolsVersion BUILD_TOOLS_VERSION

    defaultConfig {
        minSdkVersion MIN_SDK_VERSION
        targetSdkVersion TARGET_SDK_VERSION
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile SUPPORT_APPCOMPAT_V7
    compile SUPPORT_CARDVIEW_V7
}

ext.GROUP="com.yiche"
ext.VERSION_NAME="1.1.0-SNAPSHOT"
ext.POM_ARTIFACT_ID="changeskin"

apply from: "${project.rootDir}/gradle_mvn_push.gradle"

這裡請關注下面的程式碼,GROUPVERSION_NAMEPOM_ARTIFACT_ID和最後一行引入我們前面寫的gradle_mvn_push.gradle

GROUP一般代表了你的組織名稱,例如我的com.yiche
POM_ARTIFACT_IDLibrary 的簡稱。
VERSION_NAME版本號,如果有-SNAPSHOT表示是快照版。

上面這三個也就組成了我們平常看見的引依賴 com.yiche:changeskin:1.1.0-SNAPSHOT

引用私有 Maven

下面就直接上一段程式碼吧,這是專案根目錄的build.gradle裡面修改了 maven 倉庫的地址。

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.3'
    }
}

allprojects {

    repositories {
//        jcenter()
        // 私有 release 地址
        maven{
            url "http://192.168.4.53:32770/content/repositories/releases/"
        }
        // 私有 snapshot 地址
        maven{
            url "http://192.168.4.53:32770/content/repositories/snapshots/"
        }
        //jcenter 代理
        maven{
            url "http://192.168.4.53:32770/content/repositories/jcenter/"
        }
        // maven 代理
        maven{
            url "http://192.168.4.53:32770/content/repositories/central/"
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

好的,到這裡就算結束了,後面這部分寫的比較少,有問題留言啦。

相關推薦

私有 Maven 倉庫

專案組從2015年上半年全面切換到 AndroidStudio 進行開發,隨著這1年多業務邏輯和程式碼邏輯的增長,導致專案 LibraryModule 由最初的3個增長到如今的8個。 程式碼量的增加必然導致編譯的變慢,AndroidStudio 在編譯專案時

docker以https方式私有鏡像倉庫harbor

tag type crypt ada alt strong centos7.4 new 目錄 基礎環境系統:centos7.4 docker安裝安裝依賴包yum install -y yum-utils device-mapper-persistent-data lvm2安

Linuxyum源倉庫

配置文件 管理工具 軟件包 linux yum倉庫 本文以自建guestfish鏡像管理工具源為例: 第一步:清空本地的yum緩存,避免跟以前下載的包混淆; #yum clean all 第二步:yum下載所需要的軟件包。 註:這裏有兩種方法可以緩存rpm包:

Android業務組件化之Gradle和Sonatype Nexus搭建私有maven倉庫

Android 前言: 公司的業務組件化推進的已經差不多三四個月的時間了,各個業務組件之間的解耦工作已經基本完成,各個業務組件以module的形式存在項目中,然後項目依賴本地的module,多少有點不太利於項目的並行開發維護了,本質原因就是如果是依賴本地的,必須要將依賴

私有maven服務器

eight 服務器 十分 ges 卸載 height prop cmd命令 per 私服的創建 1.下載nexus服務 nexus-2.12.0-01-bundle     https://pan.baidu.com/s/1o8OfieI   2.下載m

使用Artifactory搭建私有Maven倉庫

      在涉及到模組化開發過程中,我們想要將公開或公用元件 aar/jar 上傳至Maven Center or JCenter 倉庫中心(將Android專案開源到JCenter兩種方式),以便於持續整合。但是對於有些元件我們不想對外公開這時候就需要我們搭建一個本

Android-使用Nexus搭建私有Maven倉庫

一、先看一些概念 1、Maven倉庫分類 從Maven的依賴下載管理角度來看, Maven倉庫分為遠端倉庫和本地倉庫,遠端倉庫的使用需要新增倉庫地址才能正常連線下載依賴。Maven的遠端倉庫分為中央倉庫和私服倉庫,中央倉庫存放了世界各地上傳的依賴包,比較出名的是Jcent

Nexus搭建私有maven倉庫

準備工作 jdk或者jre環境 nexus-2.14.5-02-bundle安裝包zip 下載地址 下載地址:http://www.sonatype.org/nexus/go (最下面的下載這裡為例) 搭建私

將專案打包至私有maven倉庫

1.下載並安裝maven 2.開啟conf目錄的settings.xml檔案,找到servers節點並新增私有倉庫的id、使用者名稱、密碼 <!-- 配 上傳的賬號和密碼 --> <!-- 釋出到發行版本的倉庫中,即正式版本倉庫 -->    &l

本地git倉庫推送到伺服器的git倉庫實現目錄檔案同步教程[整理]

1.首先,先在伺服器上安裝git,如果有git的話就不用走這一步了 yum安裝git [[email protected] ~]# cd src/ [[email protected] src]# wget http://dl.fedoraproj

Android Studio上傳aar到私有maven倉庫

自從使用Android Studio來進行專案開發後,gradle就成了新的專案管理工具,對於第三方庫或者外掛的管理都十分方便,而我們想要自己的庫也能像這樣使用: implementation 'xxxx:xxxx:1.0.0' 我們就需要將自

Android業務元件化之Gradle和Sonatype Nexus搭建私有maven倉庫

前言:      公司的業務元件化推進的已經差不多三四個月的時間了,各個業務元件之間的解耦工作已經基本完成,各個業務元件以module的形式存在專案中,然後專案依賴本地的module,多少有點不太利於專案的並行開發維護了,本質原因就是如果是依賴本地的,必須要將依賴的module和主工程放在一個project裡

使用Gradle和Sonatype Nexus 搭建私有maven倉庫

前言: 隨著業務的增長,需求量增多,我們的App 元件也越來越多,幾乎大部分元件都有用到同樣的第三方庫和公司內部封裝的庫,而團隊中的所有人都重複的從maven 遠端的中央倉庫下載構建,這樣就會加大了倉庫的負載和浪費了外網的頻寬,網速慢的話,就要等很久很

Android Studio 如何使用定義(本地)maven倉庫中的庫

最近這兩天一直在研究這個,網上找了很多別人寫的部落格,總是顯得一頭霧水,不知所措,可能我只是一個菜鳥,很多東西理解不了吧,不過我還是要把他分享出來,或許能夠幫到一些人。 我就不說那麼多,不然這篇文章就跟別人的沒什麼兩樣了,對於Android Studio來

centos使用nexus搭建私有maven倉庫

本文只做個人筆記備忘,描述不夠詳細,見諒 1.配置java環境 ,配置maven環境 詳見http://blog.csdn.net/programmeryu/article/details/77881437 2.下載解壓nexus wget https://sonat

使用 Sonatype Nexus 3 搭建 Maven 私服、本地私有 Maven 倉庫,Gradle 打包 jar 、arr 後自動上傳到 Nexus Maven 倉庫配置

1 下載 Nexus 3 官網截圖 注:Nexus 3 版本的執行需要 jdk1.8 解壓 得到 2 個資料夾 // Nexus 執行時所需要的檔案,如啟動指令碼 nexus-3.9.0-01 // Nexus生成的配置檔案,

搭建公司私有MAVEN倉庫過程

一、下載maven          

docker倉庫Registry

建倉 問題解決 pin efi lan crt gis install fault 因為生產情況下官方容器還是比較慢的,所以會用到自建docker倉庫。docker官方提供完整部署倉庫的容器,你只需要提供域名證書,把文件系統掛載到容器,一個用戶密碼文件就可以使

yum倉庫yum源

cat logs hang open nbsp strong update 滿足 -- 目的:搭建自己的yum源主要是解決大批量服務器下載更新人互聯網帶寬占用問題及速度問題以及不能訪問的問題。 服務端: 步驟如下: 一、創建一個目錄,就是我們yum軟件存放的目

Linux 筆記 #06# 在 VPS 上 Git倉庫

lin 安全性 bom x86 amp style 圖片 sudo entos 參考: GitHub Help: Connecting to GitHub with SSH 廖雪峰的官方網站: 搭建Git服務器 菜鳥教程: Git 服務器搭建 1. 安裝記錄(