Android Nexus私有庫搭建

相信很多人都發(fā)現(xiàn)了摔敛,github上很多優(yōu)秀的開源項(xiàng)目都是以一種組件化的方式來寫的践付,都是直接通過gradle的compile把一個(gè)jar包或者aar包引用過來供項(xiàng)目里的代碼來使用的。這其實(shí)就是把你寫好的一個(gè)模塊放到私有庫上频鉴,然后直接引用的道理栓辜。那么肯定會(huì)有很多人有這樣的疑惑:AndroidStudio里不是有一個(gè)module的概念嗎,module不僅可以在其他項(xiàng)目里復(fù)用垛孔,我只要import一下就可以了藕甩,而且還方便修改,萬一哪天需求突然變了似炎,那修改起來不是很方便嗎辛萍!沒錯(cuò),這個(gè)也是主管讓我去做私有庫時(shí)候我的第一反應(yīng)羡藐,我覺得module有很強(qiáng)大的優(yōu)勢(shì)啊贩毕,為什么還要去花精力去做私有庫呢!但主管的一句話說服了我仆嗦,具體怎么說的我忘記了辉阶,我就說我理解的吧:私有庫的用途是讓你在開發(fā)其他app時(shí)候需要這個(gè)模塊的時(shí)候就直接引入這個(gè)模塊,而模塊的作用相當(dāng)于一個(gè)零件,如果通過module的形式谆甜,很容易造成垃僚,這個(gè)項(xiàng)目里加了方法,改了方法规辱,那個(gè)項(xiàng)目里沒改谆棺,或者改了其他的方法,這樣子的形式來作為模塊的話當(dāng)然是不夠優(yōu)秀的罕袋。所以改淑,我們要搭建私服,用的最多的就是我要介紹的Nexus了浴讯。
首先朵夏,你可以在本地先搭個(gè)Nexus試試,下載地址:點(diǎn)擊打開鏈接
Nexus 3.xx直接下載.dmg或者.exe即可榆纽。Nexus 2.xx則需要下載安裝包仰猖,然后進(jìn)行一大堆的配置,具體配置讀者可以去自行谷歌或者百度奈籽。直接.dmg下載下來很方便噢饥侵。噢,安裝之前要確保電腦上是否安裝了JDK衣屏,如果沒有安裝爆捞,那么得先去安裝JDK。
安裝3.xx的同學(xué)安裝完以后勾拉,打開,進(jìn)入是這樣子的界面:

Snip20170420_2.png

安裝2.xx的同學(xué)進(jìn)去是這樣的盗温,我也去試了一下:

Snip20170420_3.png

個(gè)人覺得3.xx界面上來說友好多了藕赞,但是倉庫設(shè)置稍微有點(diǎn)難找。卖局。斧蜕。下面均以3.xx為例子講解,點(diǎn)擊右上角的登錄砚偶,默認(rèn)賬戶名密碼是admin/admin123批销。登錄進(jìn)去以后,左上角會(huì)有個(gè)設(shè)置按鈕染坯,(有時(shí)候會(huì)沒有均芽,我估計(jì)是bug吧,所以很難找单鹿,一開始我愣是沒找到)掀宋,進(jìn)去以后,左邊有個(gè)Repositories,你會(huì)發(fā)現(xiàn)已經(jīng)有很多個(gè)倉庫建好了劲妙,如圖:

Snip20170420_4.png

每個(gè)倉庫都有自己的屬性湃鹊,選擇一個(gè)倉庫就可以查看這個(gè)倉庫的一些具體信息。我們的目的主要是把我們的項(xiàng)目代碼發(fā)布到這些倉庫里去镣奋,既然要發(fā)布到這些倉庫上去币呵,我們就不想我們的代碼外泄出去,那我們就要選擇hosted類型的倉庫侨颈,hosted類型是Nexus oss所在自己本地的服務(wù)器上的倉庫余赢,比較安全。我們進(jìn)行操作的時(shí)候肛搬,其實(shí)最主要的還是maven-releases和maven-snapshots兩個(gè)倉庫没佑,這兩個(gè)倉庫有什么區(qū)別呢?只是一個(gè)Deployment Policy部署協(xié)議上的區(qū)別温赔,maven-releases上的是Disable Redeploy(不允許重復(fù)部署)蛤奢,意思就是部署上去的就是正式版本的庫,如果之后更新lib只能以更新版本號(hào)的形式操作陶贼。而maven-snapshots則是Allow Redeploy(允許重復(fù)部署)啤贩,顧名思義,就是不需要更新版本號(hào)拜秧,只要groupId,artifactId,version相同就可以進(jìn)行覆蓋痹屹,一般用于你的module還沒進(jìn)行完全測(cè)試的時(shí)候。其實(shí)一般項(xiàng)目開發(fā)中module中的寫的方法都可以在項(xiàng)目中直接引用測(cè)試枉氮,測(cè)試通過以后再上傳到私有庫上志衍,再加上開發(fā)進(jìn)度比較緊,所以我開發(fā)中一般不太上傳到snapshots上聊替。楼肪。。當(dāng)然從程序嚴(yán)謹(jǐn)程度上還是有必要進(jìn)行這一步的惹悄。春叫。。這里主要考慮到了成本問題泣港。
倉庫搞好了暂殖,之后我們就要把我們的代碼上傳到私有庫上了,首先新建一個(gè)Android項(xiàng)目当纱,然后new module呛每,在module的bulid.gradle里添加下面配置:

apply plugin: 'maven'  
  
def isReleaseBuild() {  
    return VERSION_NAME.contains("SNAPSHOT") == false  
}  
def getRepositoryUsername() {  
    return hasProperty('NEXUS_USERNAME') ? NEXUS_USERNAME : ""  
}  
def getRepositoryPassword() {  
    return hasProperty('NEXUS_PASSWORD') ? NEXUS_PASSWORD : ""  
}  
afterEvaluate { project ->  
    uploadArchives {  
        repositories {  
            mavenDeployer {  
                pom.groupId = GROUP  
                pom.artifactId = POM_ARTIFACT_ID  
                pom.version = VERSION_NAME  
                repository(url: RELEASE_REPOSITORY_URL) {  
                    authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())  
                }  
                snapshotRepository(url: SNAPSHOT_REPOSITORY_URL) {  
                    authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())  
                }  
            }  
        }  
    }  
    task androidJavadocs(type: Javadoc) {  
        source = android.sourceSets.main.java.srcDirs  
        classpath += project.files(android.getBootClasspath().join(File.pathSeparator))  
    }  
    task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {  
        classifier = 'javadoc'  
        from androidJavadocs.destinationDir  
    }  
    task androidSourcesJar(type: Jar) {  
        classifier = 'sources'  
        from android.sourceSets.main.java.sourceFiles  
    }  
    artifacts {  
        archives androidSourcesJar  
        archives androidJavadocsJar  
    }  
}  

然后在該module目錄下添加grade.properties配置文件:

GROUP=//.........  
VERSION_NAME=1.0.0  
POM_ARTIFACT_ID=//.........  
  
SNAPSHOT_REPOSITORY_URL=//....  
RELEASE_REPOSITORY_URL=//....  
NEXUS_USERNAME=admin  
NEXUS_PASSWORD=admin123  

其中GROUP為對(duì)應(yīng)的groupId,看build.gradle就可以知道這里的邏輯是如果groupId名字中包含SNAPSHOT字符坡氯,module就發(fā)不到snapshots倉庫里莉给,否則發(fā)布到releases倉庫毙石。VERSION_NAME就是對(duì)應(yīng)的版本號(hào),記住發(fā)到releases倉庫上的項(xiàng)目更新以后版本號(hào)要加上去颓遏。POM_ARTIFACT_ID就是對(duì)應(yīng)的artifactId值徐矩。在私有庫中,你的項(xiàng)目是以group:artifactId:version的形式存放的叁幢。接下來兩個(gè)url就是對(duì)應(yīng)snapshots和releases的倉庫地址滤灯。如果你是本地搭建的nexus,如果你是mac曼玩,在終端中輸入ifconfig命令行就可以知道你的ip地址了鳞骤。
配置完畢,在AndroidStudio右邊的Gradle面板中找到對(duì)應(yīng)的module黍判,然后在upload里有一個(gè)uploadArchive選項(xiàng)豫尽,雙擊就可以了,然后就build success了顷帖!私有庫上傳成功美旧!

私有庫上傳成功以后,我們就可以在所有項(xiàng)目中直接引用這個(gè)私有庫了贬墩。引用的方法很簡單榴嗅,在項(xiàng)目的build.gradle里allprojects下添加:

maven{  
    url("http://192.168.20.78:8081/repository/maven-releases/")  
}  

然后就可以在app目錄下build.gradle里直接compile就可以了,記住格式陶舞,group:artifactedId:version嗽测,就像這樣:

compile 'com.cgtz.test:test:1.0.0' 

具體公司項(xiàng)目開發(fā)中,新創(chuàng)一個(gè)git的項(xiàng)目肿孵,在這個(gè)項(xiàng)目中新建module上傳私有庫唠粥,并可以在app里對(duì)各個(gè)方法進(jìn)行測(cè)試,至此停做,私有庫的玩法就介紹完畢了.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末厅贪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子雅宾,更是在濱河造成了極大的恐慌,老刑警劉巖葵硕,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件眉抬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡懈凹,警方通過查閱死者的電腦和手機(jī)蜀变,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來介评,“玉大人库北,你說我怎么就攤上這事爬舰。” “怎么了寒瓦?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵情屹,是天一觀的道長。 經(jīng)常有香客問我杂腰,道長垃你,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任惜颇,我火速辦了婚禮,結(jié)果婚禮上少辣,老公的妹妹穿的比我還像新娘凌摄。我一直安慰自己,他們只是感情好漓帅,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布锨亏。 她就那樣靜靜地躺著,像睡著了一般煎殷。 火紅的嫁衣襯著肌膚如雪屯伞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天豪直,我揣著相機(jī)與錄音劣摇,去河邊找鬼。 笑死弓乙,一個(gè)胖子當(dāng)著我的面吹牛末融,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播暇韧,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼勾习,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了懈玻?” 一聲冷哼從身側(cè)響起巧婶,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涂乌,沒想到半個(gè)月后艺栈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡湾盒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年湿右,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罚勾。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡毅人,死狀恐怖吭狡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丈莺,我是刑警寧澤划煮,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站场刑,受9級(jí)特大地震影響般此,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜牵现,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一铐懊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瞎疼,春花似錦科乎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至太抓,卻和暖如春空闲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背走敌。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國打工碴倾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掉丽。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓跌榔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捶障。 傳聞我的和親對(duì)象是個(gè)殘疾皇子僧须,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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

  • 如需轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/u011974987/article/details...
    Xiho丶閱讀 3,111評(píng)論 1 6
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)项炼,斷路器担平,智...
    卡卡羅2017閱讀 134,716評(píng)論 18 139
  • 放一把紅色的傘吧在下雨的窗前如今再也沒有一絲力氣移植玫瑰,到室里 所有的歡喜都應(yīng)了當(dāng)初的承諾丟了夜的深與真青鳥便是...
    立黃昏閱讀 1,376評(píng)論 83 65
  • 成長還有一個(gè)名字叫孤獨(dú)锭部。它直抵人內(nèi)心最柔軟的部分暂论,或是在夜深人靜或是在破曉黎明,或是在熱鬧街頭或是在孤身一人…… ...
    就著孤獨(dú)下酒閱讀 519評(píng)論 0 0
  • 上班上的有些麻木盆耽,感覺生活一遍又一遍的重復(fù)蹋砚,沒有了激情扼菠。 今天心情不好,有些生氣坝咐,覺得虛度了一天循榆。我喜歡學(xué)新的東西...
    木象公主閱讀 512評(píng)論 0 0