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

如需轉(zhuǎn)載請(qǐng)標(biāo)明出處:
http://blog.csdn.net/u011974987/article/details/52372185
首發(fā)于CSDN出自:【徐Xiho的博客】

前言:

隨著業(yè)務(wù)的增長(zhǎng)咱圆,需求量增多,我們的App 組件也越來越多,幾乎大部分組件都有用到同樣的第三方庫和公司內(nèi)部封裝的庫,而團(tuán)隊(duì)中的所有人都重復(fù)的從maven 遠(yuǎn)程的中央倉庫下載構(gòu)建,這樣就會(huì)加大了倉庫的負(fù)載和浪費(fèi)了外網(wǎng)的帶寬石挂,網(wǎng)速慢的話,就要等很久很久,半個(gè)小時(shí)称诗,幾個(gè)小時(shí),都有可能头遭!這樣明顯影響項(xiàng)目的開發(fā)進(jìn)度寓免,有的公司還是在內(nèi)網(wǎng)的情況下開發(fā),連接不到中央倉庫怎么辦计维?公司內(nèi)部開發(fā)的公共組件怎么讓其他項(xiàng)目共用呢袜香?這個(gè)時(shí)候,我們不得不為自己的團(tuán)隊(duì)搭建一個(gè)私服maven倉庫鲫惶,來提高我們的開發(fā)效率蜈首。

起初,對(duì)gradle和maven不是很熟剑按,看了網(wǎng)上的教程一臉懵逼疾就,后來,花了點(diǎn)時(shí)間艺蝴,發(fā)現(xiàn)整個(gè)過程也還是很簡(jiǎn)單的猬腰。↓↓

首先我們來了解一下猜敢,

一姑荷、什么是Maven,Gradle?

Maven 是一個(gè)項(xiàng)目管理和自動(dòng)構(gòu)建工具。Maven 包集中存放的地方缩擂,就是 Maven 倉庫鼠冕。這些倉庫,可以是放在本地胯盯,也可以放在某個(gè)遠(yuǎn)程服務(wù)器上懈费。 可以是私有倉庫,也可以是公開的博脑。下開發(fā)用的庫列表:

mavenCentral();
jcenter()
maven {
     url 'file:///Users/my-user-name/Documents/Android/repo/'
}
maven {
    url 'http://localhost:8081/nexus/content/repositories/releases/'
}


Android Studio Gradle 主要支持兩個(gè) Maven 中央庫:mavenCentral 和 jcenter憎乙。

  • mavenCentral 是最早的 maven 中央倉庫
  • jcenter 是 Android Studio 0.8 版本起的默認(rèn) maven 中央倉庫
  • 第三個(gè)是我的本機(jī)的倉庫
  • 第四個(gè)是筆者部署在內(nèi)網(wǎng)服務(wù)器的私有倉庫

Gradle 是一個(gè)基于Apache Ant和Apache Maven概念的項(xiàng)目自動(dòng)化建構(gòu)工具票罐。它使用一種基于Groovy的特定領(lǐng)域語言來聲明項(xiàng)目設(shè)置,而不是傳統(tǒng)的XML

**二泞边、使用Nexus搭建maven私服 **

1.Nexus 下載安裝:

官網(wǎng)下載地址:http://www.sonatype.org/nexus/go/该押,我的開發(fā)環(huán)境是Windows,我下載的是Nexus Repository Manager OSS 2.xx下面的 All platforms nexus-2.13.0-01-bundle.zip壓縮文件阵谚〔侠瘢↓

這里寫圖片描述

2.Nexus 啟動(dòng):

下載完成之后,解壓后進(jìn)入\nexus-2.1.2-bundle\nexus-2.1.2\bin\jsw\梢什,根據(jù)操作系統(tǒng)類型選擇文件夾奠蹬,我選的是windows-x86-32文件夾,進(jìn)入后可看到如下所示bat文件绳矩。


這里寫圖片描述

雙擊console-nexus.bat運(yùn)行罩润。再瀏覽器中輸入http://127.0.0.1:8081/nexus/,出現(xiàn)圖(2)所示就代表nexus已經(jīng)啟動(dòng)成功了翼馆。

這里寫圖片描述

圖(2)

8081是默認(rèn)的端口號(hào)割以,要修改端口號(hào),進(jìn)入\conf\打開nexus.properties文件应媚,修改application-port屬性值就可以了严沥。
默認(rèn)的用戶名和密碼分別是:admin和admin123。點(diǎn)擊右上角的log in 登錄后如圖所示:
點(diǎn)擊左側(cè)的 repositories 查看現(xiàn)有的倉庫列表:


這里寫圖片描述

3.Nexus倉庫:

這里的倉庫分了四種類型

  1. hosted(宿主倉庫):用來部署自己,第三方或者公共倉庫的構(gòu)件
  2. proxy(代理倉庫):代理遠(yuǎn)程倉庫
  3. virtual(虛擬倉庫):默認(rèn)提供了一個(gè) Central M1虛擬倉庫 用來將maven 2適配為maven 1
  4. group(倉庫組):統(tǒng)一管理多個(gè)倉庫

<font color=blue size=5>Public Repositories: 倉庫組

3rd party: 無法從公共倉庫獲得的第三方發(fā)布版本的構(gòu)件倉庫

Apache Snapshots: 用了代理ApacheMaven倉庫快照版本的構(gòu)件倉庫

Central: 用來代理maven中央倉庫中發(fā)布版本構(gòu)件的倉庫

Central M1 shadow: 用于提供中央倉庫中M1格式的發(fā)布版本的構(gòu)件鏡像倉庫

Codehaus Snapshots: 用來代理CodehausMaven 倉庫的快照版本構(gòu)件的倉庫

Releases: 用來部署管理內(nèi)部的發(fā)布版本構(gòu)件的宿主類型倉庫

Snapshots:用來部署管理內(nèi)部的快照版本構(gòu)件的宿主類型倉庫

4.建立Nexus宿主倉庫

新建一個(gè)內(nèi)部倉庫中姜,步驟為Repositories –> Add –> Hosted Repository消玄,在頁面的下半部分輸入框中填入Repository ID和Repository Name即可,另外把Deployment Policy設(shè)置為Allow Redeploy丢胚,點(diǎn)擊save就創(chuàng)建完成了翩瓜。這里我點(diǎn)擊添加宿主類型的倉庫,在倉庫列表的下方會(huì)出現(xiàn)新增倉庫的配置携龟,如下所示:

這里寫圖片描述

建立好新的倉庫之后需要配置一下相關(guān)賬號(hào)信息.在安全選項(xiàng)下選擇用戶選項(xiàng),可以看到三個(gè)默認(rèn)的賬號(hào),分別是管理員賬號(hào),部署賬號(hào)和Nexus賬號(hào).正常訪問倉庫內(nèi)容的時(shí)候是不需要這三個(gè)賬戶的,一般也就是把部署賬號(hào)暴露出去,方便倉庫項(xiàng)目維護(hù)人員部署項(xiàng)目使用.所以這里可以用默認(rèn)的Deployment賬戶(記得重置下密碼).也可以新建一個(gè)賬號(hào)來使用,新建的時(shí)候可以通過add role management來控制該賬號(hào)的權(quán)限兔跌。
點(diǎn)擊新建的倉庫的url可以直接如今倉庫的路勁,因?yàn)楝F(xiàn)在還沒有部署項(xiàng)目峡蟋,所以是空的倉庫坟桅。

<font color=black size=5>至此,搭建私服的maven倉庫就已經(jīng)完成蕊蝗,下面繼續(xù)介紹Android 端在AS 上面的應(yīng)用仅乓。

三、上傳庫到Maven倉庫

上傳庫到maven倉庫有兩種方式蓬戚,我們先來介紹第一種:

  1. 首先我們創(chuàng)建一個(gè)新的AndroidStudio 項(xiàng)目夸楣,然后新建一個(gè)module,選擇Android Library。
這里寫圖片描述

然后裕偿,我們隨便寫一個(gè)功能供別人使用洞慎。例如我寫一個(gè)ToastUtils:

這里寫圖片描述

然后RebuildProject生成依賴的arr包。

2.在MavenRepoDemo項(xiàng)目的根目錄的build.gradle中配置剛剛建立的倉庫:

allprojects {
    repositories {
        jcenter()
        maven{ url 'http://localhost:8081/nexus/content/repositories/releases/'}

    }
}

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

  1. 在同目錄下配置gradle.properties文件嘿棘,定義通用屬性,方便如果有多個(gè)庫需要部署時(shí)旭绒,不需要修改每一個(gè)庫中的配置:
#Maven倉庫的URL
MAVEN_REPO_RELEASE_URL=http://localhost:8081/nexus/content/repositories/releases/
MAVEN_REPO_SNAPSHOT_URL=http://localhost:8081/nexus/content/repositories/snapshots/

#對(duì)應(yīng)maven的GroupId的值
GROUP = common
#登錄nexus ossde的用戶名

NEXUS_USERNAME=admin
#登錄nexus oss的密碼

NEXUS_PASSWORD=admin123

# groupid
GROUP_ID = common

# type
TYPE = aar

# description
DESCRIPTION = This is Toast lib

這里的倉庫我用的是Nexus 原有的倉庫(你可以換成剛剛新建的倉庫地址)鸟妙。

  1. 修改module對(duì)應(yīng)的build.gradle文件,添加以下配置:
apply plugin: 'com.android.library'

apply plugin: 'maven'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

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

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

    lintOptions {
        abortOnError false
    }

}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
}

uploadArchives {
    configuration = configurations.archives
    repositories {
        mavenDeployer {
            snapshotRepository(url: MAVEN_REPO_SNAPSHOT_URL) {
                authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
            }
            repository(url: MAVEN_REPO_RELEASE_URL) {
                authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
            }
            pom.project {
                version '1.0.0'
                artifactId 'toastutils-lib'
                groupId GROUP_ID
                packaging TYPE
                description DESCRIPTION
            }
        }
    }
}

artifacts {
    archives file('toastutils.aar')
}



  1. 在as右邊欄挥吵,找到Gradle打開如下:


    這里寫圖片描述

然后雙擊uploadArchives重父,編譯腳本并上傳arr文件到私有倉庫,最后在控制臺(tái)可以看到日志是否上傳成功忽匈。

可以去倉庫查看到剛剛上傳的庫文件:

這里寫圖片描述

第二種房午,就是直接通過Nexus直接上傳,這種就不詳細(xì)說了丹允,有興趣的自己去研究下吧郭厌! 嘿嘿

四、在項(xiàng)目中應(yīng)用

  1. 在項(xiàng)目的根目錄build.gradle配置如下:
這里寫圖片描述
  1. 在app目錄下的build.gradle配置如下:
這里寫圖片描述

這樣我們就完工了雕蔽。在項(xiàng)目中調(diào)用我們庫了折柠,別人按照上面的配置就可以引用庫使用了。

<font color=black size=5>附上Demo的GitHub項(xiàng)目源碼MavenRepoDemo

對(duì)于頻繁更新的子項(xiàng)目是否適合采用這種方式批狐。因?yàn)槊看巫儎?dòng)都需要上傳扇售,而主項(xiàng)目在引用該AAR的時(shí)候則需要每次都去檢查是否更新, 這會(huì)使得編譯時(shí)間大大增加嚣艇,有了這個(gè)maven庫承冰,就不用那么麻煩了。

想了解更多有關(guān)的資料:

Nexus私服使Maven更加強(qiáng)大

擁抱的androidStudio 系列文章 博客比較全

學(xué)習(xí)理解并整理下來的筆記食零。
希望大家能夠指點(diǎn)或提出寶貴意見困乒,謝謝!一起學(xué)習(xí)慌洪。
轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/u011974987/article/details/52372185
個(gè)人站點(diǎn):xuhao.tech

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末顶燕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子冈爹,更是在濱河造成了極大的恐慌涌攻,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件频伤,死亡現(xiàn)場(chǎng)離奇詭異恳谎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門因痛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來婚苹,“玉大人,你說我怎么就攤上這事鸵膏〔采” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵谭企,是天一觀的道長(zhǎng)廓译。 經(jīng)常有香客問我,道長(zhǎng)债查,這世上最難降的妖魔是什么非区? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮盹廷,結(jié)果婚禮上征绸,老公的妹妹穿的比我還像新娘。我一直安慰自己俄占,他們只是感情好管怠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颠放,像睡著了一般排惨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碰凶,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天暮芭,我揣著相機(jī)與錄音,去河邊找鬼欲低。 笑死辕宏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的砾莱。 我是一名探鬼主播瑞筐,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼腊瑟!你這毒婦竟也來了聚假?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤闰非,失蹤者是張志新(化名)和其女友劉穎膘格,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體财松,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瘪贱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年纱控,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菜秦。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡甜害,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出球昨,到底是詐尸還是另有隱情尔店,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布褪尝,位于F島的核電站闹获,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏河哑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一龟虎、第九天 我趴在偏房一處隱蔽的房頂上張望璃谨。 院中可真熱鬧,春花似錦鲤妥、人聲如沸佳吞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽底扳。三九已至,卻和暖如春贡耽,著一層夾襖步出監(jiān)牢的瞬間衷模,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工蒲赂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阱冶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓滥嘴,卻偏偏與公主長(zhǎng)得像木蹬,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子若皱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 首先私服是一種衍生出來的特殊的Maven遠(yuǎn)程倉庫镊叁,構(gòu)建私服的好處請(qǐng)看3.5私服 可以幫助大家建立私服的倉庫管理軟件...
    zlcook閱讀 10,549評(píng)論 0 32
  • |-1-更新內(nèi)容[6.從倉庫解析依賴的機(jī)制(重要)] 1Maven倉庫作用 倉庫用來存儲(chǔ)所有項(xiàng)目使用到構(gòu)件,在ma...
    zlcook閱讀 6,062評(píng)論 0 25
  • Nexus 官網(wǎng):http://www.sonatype.com/ 前言 什么是maven走触、gradle Mave...
    鍵盤男閱讀 33,201評(píng)論 33 55
  • 和技能特訓(xùn)營(yíng)的一個(gè)小伙伴聊天晦譬,我說我還沒找到自己的定位,她問我饺汹,那樣的話應(yīng)該會(huì)感覺比較焦慮吧蛔添?我沒有立刻回答,過了...
    joylulu閱讀 252評(píng)論 0 2
  • 這幾天要實(shí)現(xiàn)左劃刪除的功能,發(fā)現(xiàn)網(wǎng)上很多帖子大多出自一人之手迎瞧,然后都是 copy 的文章夸溶,其實(shí)都沒有那么復(fù)雜,只實(shí)...
    IOSMan閱讀 3,078評(píng)論 5 15