在前邊組件化開發(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)為例榕栏。
下載完成之后畔勤,我們解壓壓縮包到一個(gè)文件夾下(例如:D:\nexus-3.24.0-02-win64),里面包含nexus-3.24.0-02和sonatype-work
然后進(jìn)入到D:\nexus-3.24.0-02-win64\nexus-3.24.0-02\bin目錄中
軟件沒有圖形安裝界面扒磁,我們需要進(jìn)入命令行運(yùn)行nexus.exe
在安裝Nexus前庆揪,請確保系統(tǒng)已經(jīng)安裝了JDK1.8及以上的java環(huán)境
然后可以用 nexus.exe /run命令啟動Nexus:
使用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)行)
這樣就可以在windows服務(wù)中看到已經(jīng)安裝的nexus服務(wù)
這里我們可以啟動/關(guān)閉服務(wù),也可以設(shè)置服務(wù)是自動/手動
安裝nexus服務(wù)成功并啟動后颗品,我們就可以訪問nexus了肯尺。
訪問nexus
服務(wù)啟動后就可以通過瀏覽器訪問,默認(rèn)端口為8081躯枢,可以通過服務(wù)器IP加端口號直接訪問(http://<server_host>:8081)
默認(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文件。
要上傳到倉庫滴须,還是利用gradle自動化構(gòu)建的一些東西舌狗。
一、在工程的gradle.properties文件中扔水,配置需要使用全局信息
如上圖所示痛侍,我們可以配置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
}
}
upload_nexus.gradle編寫完之后,我們把該文件引入utilcode模塊的build.gradle中丑勤,如下圖所示:
三华嘹、上傳library開發(fā)庫模塊
配置已經(jīng)完成,打開Android Studio 中打開右側(cè)的 Gradle 側(cè)邊欄法竞,打開 這個(gè)module library耙厚,可以看到 uploadArchives,這就是剛才創(chuàng)建的上傳 Task岔霸,點(diǎn)擊即可完成上傳
如果 uploadArchives Task 執(zhí)行成功薛躬,在 Nexus 倉庫中就可以看到上傳的內(nèi)容了。點(diǎn)擊左側(cè)導(dǎo)航欄 Browse - maven-snapshot 就可以看到我們上傳的開發(fā)庫了呆细,如下圖所示:
在項(xiàng)目中使用上傳的開發(fā)庫
上傳到倉庫中了之后泛豪,我們在項(xiàng)目中如何使用呢?,他的使用和我們添加依賴使用第三方庫是一樣的诡曙。