Android團(tuán)隊(duì)怎樣搭建自己的開發(fā)倉庫

在前邊組件化開發(fā)的相關(guān)文章中炊琉,我們提到了開發(fā)中我們可以把一些共有的功能庫比如網(wǎng)絡(luò)庫展蒂、圖片加載庫、工具庫等等提取封裝后苔咪,作為基礎(chǔ)(library)庫來使用锰悼,這些庫提取出來之后,要怎么使用呢团赏?還需要每個(gè)開發(fā)人員把源碼文件導(dǎo)入使用箕般,顯然這樣的方式并不方便,而且不利于基礎(chǔ)庫的維護(hù)舔清,那么我們能不能像依賴其他第三方庫那樣用gradle從倉庫下載呢丝里?答案是肯定的曲初。我們可以搭建公司團(tuán)隊(duì)自己的Maven私有倉庫。

Maven 的遠(yuǎn)程倉庫分為中央倉庫和私服倉庫丙者。中央倉庫存放了世界各地用戶上傳的依賴包复斥,比較出名的是 JCenter 和 Maven Central,開源的第三方依賴一般都會上傳到這兩個(gè)中央倉庫械媒,這樣我們只用添加這兩個(gè)中央倉庫的鏈接地址目锭,就可以下載各種我們需要的依賴了。在公司內(nèi)部纷捞,搭建一個(gè) Maven 倉庫痢虹,可以上傳平常開發(fā)中常用的開發(fā)庫或者封裝的代碼,把公司內(nèi)部不想開源的依賴包上傳到私服倉庫中主儡,有更好保密性奖唯、安全性和統(tǒng)一性。

通過建立團(tuán)隊(duì)自己的開發(fā)倉庫糜值,可以統(tǒng)一開發(fā)人員的編碼規(guī)范丰捷,統(tǒng)一開發(fā)框架,統(tǒng)一一些功能的使用等等寂汇,方便團(tuán)隊(duì)管理病往,也利于團(tuán)隊(duì)人員的相互配合等等。

下面根據(jù)我通過Sonatypec 的 Nexus創(chuàng)建Maven私有倉庫做一些介紹骄瓣,供大家參考...

使用Nexus搭建Maven私有倉庫

下載運(yùn)行Nexus

去Sonatypec官網(wǎng) 下載軟件包停巷, 根據(jù)你的操作系統(tǒng)選擇下載,這里以windows操作系統(tǒng)為例榕栏。

微信截圖_20210507185123.png

下載完成之后畔勤,我們解壓壓縮包到一個(gè)文件夾下(例如:D:\nexus-3.24.0-02-win64),里面包含nexus-3.24.0-02和sonatype-work

微信截圖_20210507190255.png

然后進(jìn)入到D:\nexus-3.24.0-02-win64\nexus-3.24.0-02\bin目錄中

微信截圖_20210507190203.png

軟件沒有圖形安裝界面扒磁,我們需要進(jìn)入命令行運(yùn)行nexus.exe

微信截圖_20210507191003.png

在安裝Nexus前庆揪,請確保系統(tǒng)已經(jīng)安裝了JDK1.8及以上的java環(huán)境

然后可以用 nexus.exe /run命令啟動Nexus:

微信截圖_20210507192017.png

使用run命令可以直接啟動Nexus,這樣啟動Nexus并沒有將它安裝到windows服務(wù)中渗磅,雖然簡單嚷硫,但是如果服務(wù)器重啟,那么就需要人為干預(yù)始鱼。在當(dāng)前命令行窗口中按住CTRL-C就可以關(guān)閉Nexus仔掸。我們放在局域網(wǎng)服務(wù)器上,當(dāng)服務(wù)器因?yàn)橐恍┰蛑貑r(shí)医清,需要人工干預(yù)起暮,顯然是不太符合我們的要求的。

我們可以使用nexus.exe /install nexus命令,將Nexus安裝到windows服務(wù)中负懦,然后設(shè)置成自動啟動筒捺,就可以在服務(wù)器重啟后,自動啟動私服了纸厉。

注意:運(yùn)行該命令需要以管理員身份運(yùn)行cmd命令行窗口(即在windows附件中系吭,找到命令提示符->右鍵->以管理員身份運(yùn)行)

微信截圖_20210508165404.png
微信截圖_20210508165711.png

這樣就可以在windows服務(wù)中看到已經(jīng)安裝的nexus服務(wù)

微信截圖_20210508170031.png

這里我們可以啟動/關(guān)閉服務(wù),也可以設(shè)置服務(wù)是自動/手動

微信截圖_20210508170145.png

安裝nexus服務(wù)成功并啟動后颗品,我們就可以訪問nexus了肯尺。

訪問nexus

服務(wù)啟動后就可以通過瀏覽器訪問,默認(rèn)端口為8081躯枢,可以通過服務(wù)器IP加端口號直接訪問(http://<server_host>:8081)

微信截圖_20210508171057.png

默認(rèn)賬號為admin则吟,密碼為admin123。登錄之后我們可以在用戶中心修改密碼锄蹂。

maven倉庫類型

maven倉庫類型只有3中氓仲,分別是: hosted、proxy得糜、group

  • hosted:宿主類型 內(nèi)部項(xiàng)目的發(fā)布倉庫敬扛,專門用來存儲我們自己生成的jar文件,aar文件朝抖。我們自己上傳的開發(fā)庫舔哪,就是上傳到該類型下的倉庫中。
  • proxy:代理類型 從遠(yuǎn)程中央倉庫中尋找數(shù)據(jù)的倉庫槽棍,如可配置阿里云maven倉庫。
  • group:組類型 Nexus通過倉庫組的概念統(tǒng)一管理多個(gè)倉庫抬驴,這樣我們在項(xiàng)目中直接請求倉庫組即可請求到倉庫組管理的多個(gè)倉庫炼七。
    簡單來說: group = hosted+proxy

[圖片上傳失敗...(image-a4e4f4-1620527640953)]

如上圖所示,maven-public就是默認(rèn)創(chuàng)建的組倉庫布持。

版本類型

  • release:專用于部署發(fā)布版本的jar或aar豌拙,對應(yīng)maven-release宿主倉庫。
  • snapshot:專用于部署快照版本的jar或aar题暖,都是以-SNAPSHOT結(jié)尾按傅,pom中version需以-SNAPSHOT(必須大寫)結(jié)尾,對應(yīng)maven-snapshot倉庫胧卤。
  • mixed:可包含release和snapshot版本

權(quán)限管理

數(shù)據(jù)權(quán)限:repository權(quán)限有兩種類型:

  • repository admin
  • repository view
    每種類型又有5種權(quán)限標(biāo)識唯绍,分別是:add,browse枝誊、delete况芒、edit、read叶撒。 可以根據(jù)需要進(jìn)行賬戶配置绝骚。

上傳library庫到倉庫

我們在本地開發(fā)耐版,封裝后開發(fā)庫之后,怎么上傳到倉庫呢压汪,這里以一個(gè)簡單的例子為例粪牲。我在本地新建了一個(gè)Autobio_Android的Android工程,這里我們再新建一個(gè)Android Library的module(名字為utilcode),這個(gè)模塊就是我們封裝開發(fā)完后要上傳到倉庫中止剖,供其他人使用的library庫腺阳,或者aar文件。

微信截圖_20210508181544.png

要上傳到倉庫滴须,還是利用gradle自動化構(gòu)建的一些東西舌狗。

一、在工程的gradle.properties文件中扔水,配置需要使用全局信息

53455345346.png

如上圖所示痛侍,我們可以配置maven-releases倉庫(一般是存放開發(fā)比較成熟穩(wěn)定的庫)的地址和maven-snapshots倉庫(一般存放處于開發(fā)階段的,可能會隨時(shí)更改的庫)的地址魔市;還有NEXUS的用戶名和密碼主届;一般一個(gè)公司一個(gè)團(tuán)隊(duì)的groupId都是一樣的,所以這里也配置一下GROUP_ID待德。

GROUP_ID:比如我們依賴第三方庫implementation 'io.reactivex.rxjava2:rxjava:2.1.12'君丁,這個(gè)rxjava庫的GROUP_ID就是io.reactivex.rxjava2,我們添加依賴庫就是:GROUP_ID:artifactId:版本號将宪。

二绘闷、在要上傳的library模塊的build.gradle文件中添加配置上傳代碼

這里為了整潔性,就把這部分代碼單獨(dú)提出來较坛,在utilcode模塊下新建一個(gè)upload_nexus.gradle的gradle文件印蔗,具體代碼如下:

apply plugin: 'maven'

afterEvaluate { project ->

    uploadArchives {
        repositories {
            mavenDeployer {
                snapshotRepository(url: MAVEN_SNAPSHOT_URL) {
                    authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
                }

                repository(url: MAVEN_URL) {
                    authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
                }

                pom.project {
                    version '0.0.2-SNAPSHOT'
                    groupId GROUP_ID
                    artifactId 'util-code'
                    packaging 'aar'
                    description 'dependences lib'
                }
            }
        }
    }
    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
    }

    //解決 JavaDoc 中文注釋生成失敗的問題
    tasks.withType(Javadoc) {
        options.addStringOption('Xdoclint:none', '-quiet')
        options.addStringOption('encoding', 'UTF-8')
        options.addStringOption('charSet', 'UTF-8')
    }
    artifacts {
        archives androidSourcesJar
        archives androidJavadocsJar
    }
}
微信截圖_20210508190745.png

upload_nexus.gradle編寫完之后,我們把該文件引入utilcode模塊的build.gradle中丑勤,如下圖所示:

微信截圖_20210508212324.png

三华嘹、上傳library開發(fā)庫模塊

配置已經(jīng)完成,打開Android Studio 中打開右側(cè)的 Gradle 側(cè)邊欄法竞,打開 這個(gè)module library耙厚,可以看到 uploadArchives,這就是剛才創(chuàng)建的上傳 Task岔霸,點(diǎn)擊即可完成上傳

微信截圖_20210508191953.png

如果 uploadArchives Task 執(zhí)行成功薛躬,在 Nexus 倉庫中就可以看到上傳的內(nèi)容了。點(diǎn)擊左側(cè)導(dǎo)航欄 Browse - maven-snapshot 就可以看到我們上傳的開發(fā)庫了呆细,如下圖所示:

微信截圖_20210508192544.png

在項(xiàng)目中使用上傳的開發(fā)庫

上傳到倉庫中了之后泛豪,我們在項(xiàng)目中如何使用呢?,他的使用和我們添加依賴使用第三方庫是一樣的诡曙。

一臀叙、項(xiàng)目根路徑的build.gradle添加倉庫地址

微信截圖_20210508212527.png

二、在應(yīng)用模塊app的build.gradle中添加開發(fā)庫地址

微信截圖_20210508212734.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末价卤,一起剝皮案震驚了整個(gè)濱河市劝萤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌慎璧,老刑警劉巖床嫌,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胸私,居然都是意外死亡厌处,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門岁疼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阔涉,“玉大人,你說我怎么就攤上這事捷绒」迮牛” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵暖侨,是天一觀的道長椭住。 經(jīng)常有香客問我,道長字逗,這世上最難降的妖魔是什么京郑? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮葫掉,結(jié)果婚禮上傻挂,老公的妹妹穿的比我還像新娘。我一直安慰自己挖息,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布兽肤。 她就那樣靜靜地躺著套腹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪资铡。 梳的紋絲不亂的頭發(fā)上电禀,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機(jī)與錄音笤休,去河邊找鬼尖飞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的政基。 我是一名探鬼主播贞铣,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沮明!你這毒婦竟也來了辕坝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤荐健,失蹤者是張志新(化名)和其女友劉穎酱畅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體江场,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纺酸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了址否。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片餐蔬。...
    茶點(diǎn)故事閱讀 40,030評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖在张,靈堂內(nèi)的尸體忽然破棺而出用含,到底是詐尸還是另有隱情,我是刑警寧澤帮匾,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布啄骇,位于F島的核電站,受9級特大地震影響瘟斜,放射性物質(zhì)發(fā)生泄漏缸夹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一螺句、第九天 我趴在偏房一處隱蔽的房頂上張望虽惭。 院中可真熱鬧,春花似錦蛇尚、人聲如沸芽唇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匆笤。三九已至,卻和暖如春谱邪,著一層夾襖步出監(jiān)牢的瞬間炮捧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工惦银, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咆课,地道東北人末誓。 一個(gè)月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像书蚪,于是被迫代替她去往敵國和親喇澡。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評論 2 355

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