新入職一家公司牲迫,初進(jìn)公司進(jìn)行一個(gè)即時(shí)通訊SDK的開(kāi)發(fā),開(kāi)發(fā)完成后打成aar包供外部使用衡楞,工程中有兩個(gè)模塊容为,aar包只能包含一個(gè)模塊,所以這里將兩個(gè)模塊打成兩個(gè)aar包放到nexus搭建的maven倉(cāng)庫(kù)寺酪,模塊之間實(shí)現(xiàn)遠(yuǎn)程依賴,這樣最后用戶接入一個(gè)aar包就實(shí)現(xiàn)了sdk的對(duì)接替劈,初次接觸這方面的東西寄雀,所以寫(xiě)下這篇文章記錄一下。
一陨献、下載安裝nexus
nexus下載地址(官網(wǎng)下載地址):https://www.sonatype.com/download-oss-sonatype
打開(kāi)網(wǎng)站后是上面這樣這樣的,填好信息后點(diǎn)擊DOWNLOAD進(jìn)入系統(tǒng)選擇。
我的是windows系統(tǒng)陨享,點(diǎn)擊之后會(huì)跳轉(zhuǎn)到下載頁(yè)画株。
到了下載頁(yè)靜靜等著就行,但我沒(méi)翻墻龄捡,所以苦等半天告訴我被拒絕了卓嫂,不過(guò)方式方法是對(duì)的,由于地理因素最終沒(méi)走到一起聘殖,只有另辟蹊徑啦晨雳,看到這里如果你跟我一樣,有一樣的苦衷(不會(huì)翻墻)奸腺,那么你有必要點(diǎn)開(kāi)這個(gè)鏈接餐禁,里面有寶貝的喔。鏈接:https://pan.baidu.com/s/1shg-bOxv_tB7jZZVohrk3Q 提取碼:5x44突照。里面的版本是3.18的帮非,如果你覺(jué)得不合適,也可以去網(wǎng)上尋求更好的讹蘑。
上面是下載解壓之后的末盔,里面有兩個(gè)文件夾,我們記錄下第一文件的目錄路徑衔肢,去配置一下系統(tǒng)環(huán)境庄岖,不配置的話每次運(yùn)行nexus都要進(jìn)入到這個(gè)目錄里面挺麻煩的,所以先去配置環(huán)境變量角骤。怎么進(jìn)到環(huán)境變量配置頁(yè)這里就不說(shuō)了隅忿,直接來(lái)看配置過(guò)程:
在系統(tǒng)變量那一欄點(diǎn)擊新建心剥,取一個(gè)自己喜歡的名字,將剛剛記錄的目錄路徑復(fù)制到變量值一欄背桐,點(diǎn)擊確定优烧,然后將這個(gè)新增的變量加到C盤(pán)路徑下。
配置完成后記得一層一層的點(diǎn)確定返回去链峭,否則不生效喔畦娄。接下來(lái)打開(kāi)命令窗口,輸入nexus.exe/install
弊仪,按回車(chē)鍵后顯示Installed service 'nexus'.熙卡,至此nexus服務(wù)就算安裝好了。
二励饵、運(yùn)行nexus服務(wù)
通過(guò)上面的步驟完成了nexus的下載和安裝驳癌,下面讓它跑起來(lái),有兩種方式去啟動(dòng)nexus役听。
一種是通過(guò)命令行輸入nexus.exe/run
颓鲜,按下回車(chē)鍵后是一輪漫長(zhǎng)的等待,就像下面這樣:
如果你等到了上圖中紅框里的那句話典予,那么一切都是值得的甜滨,如果沒(méi)等到,也不用疑惑不用焦躁瘤袖,要不衣摩,重啟電腦試試,我初次探索的時(shí)候試了好多次都沒(méi)等到這句話孽椰,結(jié)果第二天再一運(yùn)行她就神奇的出現(xiàn)了昭娩,有時(shí)就是這么奇妙,就像那該死的愛(ài)情黍匾,突然的出現(xiàn)栏渺,又突然的消失,咱也不知道咋回事锐涯,咱也不敢問(wèn)磕诊。所以當(dāng)你等到這句話之后,用第一種方法命令行啟動(dòng)nexus就成功了纹腌,不習(xí)慣用命令行的就可以用下面這種方法去啟動(dòng):
當(dāng)你安裝了之后霎终,打開(kāi)任務(wù)管理器,點(diǎn)擊服務(wù)升薯,列表是按字母排序的莱褒,一直往下翻找到nexus后右鍵摟它,然后點(diǎn)擊開(kāi)始涎劈,這樣nexus也就運(yùn)行起來(lái)了广凸。
運(yùn)行起來(lái)后阅茶,我們可以通過(guò)瀏覽器打開(kāi)網(wǎng)址http://localhost:8081/nexus/
進(jìn)入到管理后臺(tái),默認(rèn)的端口號(hào)是8081谅海,如果打不開(kāi)可以看看是不是端口被系統(tǒng)其他進(jìn)程占用了脸哀,如果要更改ip地址和端口號(hào)的話,在安裝目錄下的etc文件夾中的nexus-default文件中進(jìn)行更改扭吁,如下圖:
改完之后保存一下撞蜂,重新運(yùn)行一下nexus就可以了,打開(kāi)的后臺(tái)管理是這樣的:
點(diǎn)擊右上角sign in登錄侥袜,一般初次登錄密碼為默認(rèn)的賬號(hào):admin 密碼 admin123
蝌诡,如果提示密碼錯(cuò)誤的話,安裝目錄下一個(gè)文件記錄了密碼枫吧,復(fù)制過(guò)來(lái)就可以送漠,初次登錄之后會(huì)讓你改密碼,不知道是不是我改過(guò)密碼的緣故由蘑,我找不到那個(gè)記錄密碼的文件了,這里就不截圖了代兵,那個(gè)文件挺好認(rèn)的尼酿,文件名是PASSWORD。
登錄進(jìn)來(lái)之后是下面這樣的:
至此nexus的運(yùn)行就算成功完成了植影,下面來(lái)看看資源包的上傳過(guò)程裳擎。
三、上傳資源包
點(diǎn)擊左邊的Browse之后思币,有一個(gè)倉(cāng)庫(kù)列表:
可以看到type有三種鹿响,proxy、hostde和group谷饿,他們的區(qū)別是:
group:是一個(gè)倉(cāng)庫(kù)組惶我,可包含hosted和proxy兩種庫(kù),下載時(shí)按配置順序從中依次查找博投;
hosted:一般部署我們自己項(xiàng)目打包的jar绸贡,供內(nèi)部人員下載;
proxy:代理遠(yuǎn)程倉(cāng)庫(kù)毅哗,maven-central是默認(rèn)maven中央倉(cāng)庫(kù)代理听怕,maven-aliyun是后加的阿里遠(yuǎn)程庫(kù)代理,通過(guò)代理從遠(yuǎn)程庫(kù)中下載的依賴都會(huì)被緩存到nexus的proxy庫(kù)中虑绵。
這里我是將包放在hosted type下的mvaen-releases倉(cāng)庫(kù)下尿瞭,初次點(diǎn)進(jìn)去里面是沒(méi)有東西的:
可以點(diǎn)擊這兩個(gè)地方上傳aar包,配置好相關(guān)信息后翅睛,點(diǎn)擊upload即可:
上傳之后就能看到他了声搁,如下:
至此黑竞,你上傳的包就能在項(xiàng)目里引用了,不過(guò)在介紹引用之前酥艳,先介紹一下另一種傳包的方式摊溶,在項(xiàng)目工程里去配置好信息,實(shí)現(xiàn)一鍵上傳充石,每次只用修改版本號(hào)莫换,這種方式方便很多,下面來(lái)看看:
apply plugin:'maven'
//上傳到maven倉(cāng)庫(kù)
uploadArchives { //新增 骤铃,因?yàn)锳ndroid Studio gradle 支持maven插件拉岁,所以可以添加此task
configuration = configurations.archives
repositories {
mavenDeployer {
repository(url: 'http://loaclhost:8081/nexus/repository/maven-releases/') {
authentication(userName: 'admin', password: 'admin123')
}
pom.project {
version '1.0.0' //版本號(hào)
artifactId '****' //和前面網(wǎng)站上填寫(xiě)的一樣
groupId '*****' //和前面網(wǎng)站上填寫(xiě)的一樣
packaging 'aar' //打aar包就填寫(xiě)aar
description 'update describe' //更新描述
}
}
}
}
將上面這段代碼復(fù)制到模塊下的build.gradle,注意不是project下的build.gradle惰爬,放在最外層喊暖,上面的apply plugin:'maven'
不要忘了加,url是通過(guò)下圖中那樣復(fù)制過(guò)來(lái)的撕瞧,其余的信息都是自定義陵叽,定義成你喜歡的樣子就可以。
第二種方式配置好之后丛版,每次發(fā)版更改版本號(hào)就行巩掺,上傳的話點(diǎn)擊AS右上角Gradle,找到模塊下upload下的uploadArchives 任務(wù)页畦,sync之后就會(huì)有這個(gè)任務(wù)胖替,雙擊它就可以了,上傳成功后在管理后臺(tái)就能看到上傳的資源包了豫缨。
至此独令,資源包的上傳也就完成了,最后來(lái)看看怎么一引用好芭。
四燃箭、項(xiàng)目引用
引用分兩步。
第一步就是先得連接上遠(yuǎn)程maven倉(cāng)庫(kù)舍败,就是在project下配置遠(yuǎn)程倉(cāng)庫(kù)地址:
allprojects {
repositories {
google()
jcenter()
maven {
url 'http://localhost:8081/nexus/repository/maven-releases/' //這個(gè)路徑就是Browse下maven-release右邊有一個(gè)copy按鈕遍膜,復(fù)制出來(lái)的。
}
maven { url "https://jitpack.io" }
}
}
第二步就是導(dǎo)入依賴瓤湘,還記的之前配置的groupId瓢颅、artifactId
和version
嗎,項(xiàng)目里引用的格式為:implementation 'groupId:artifactId:version'
,將引號(hào)內(nèi)的內(nèi)容替換成之前配置的信息就完成了資源包得引用弛说。
至此就完成了挽懦,用nexus搭建maven倉(cāng)庫(kù),并上傳資源包木人,最后項(xiàng)目中引用這么一個(gè)過(guò)程信柿。由于第一次弄冀偶,所以寫(xiě)這篇文章來(lái)記錄一下探索過(guò)程,希望能幫到其他人渔嚷,其中有不當(dāng)?shù)胤竭€望指正进鸠,謝謝。
2020.6.12更新------------------------------------------------------
問(wèn)題一:每次更新發(fā)版時(shí)需要更新版本號(hào)形病,否則上傳不成功客年,報(bào)錯(cuò)。比如遠(yuǎn)程倉(cāng)庫(kù)已經(jīng)有了1.0.0版本漠吻,這是如果上傳的版本還是1.0.0就會(huì)報(bào)如下錯(cuò)誤:
Return code is: 400, ReasonPhrase: Repository does not allow updating assets: maven-releases.
所以如果在開(kāi)發(fā)過(guò)程中遇到如下錯(cuò)誤量瓜,改個(gè)遠(yuǎn)程沒(méi)有的版本號(hào)再試試。
問(wèn)題二:如上操作過(guò)程依賴的aar包途乃,會(huì)發(fā)現(xiàn)看不到源碼绍傲,點(diǎn)開(kāi)后顯示為下面這樣:
public final var cxt: android.app.Activity /* compiled code */
public final val fm: androidfanx.fragment.app.FragmentManager /* compiled code */
出現(xiàn)上面這種情況的原因是沒(méi)有上傳源代碼,依賴aar包后進(jìn)行反編譯耍共,所以無(wú)法看到源碼烫饼,也就無(wú)法進(jìn)行debug調(diào)試。
解決這種問(wèn)題的方法就是在上傳項(xiàng)目aar包的同時(shí)將項(xiàng)目源碼上傳,在要上傳的模塊中加上以下代碼试读,創(chuàng)建上傳源碼的任務(wù)枫弟,然后執(zhí)行上面上傳aar包的操作就會(huì)自動(dòng)將源碼上傳到遠(yuǎn)程,此時(shí)依賴后就能看到源碼了鹏往。
//上傳源碼
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
artifacts {
archives androidSourcesJar
}