相信很多人都發(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)入是這樣子的界面:
安裝2.xx的同學(xué)進(jìn)去是這樣的盗温,我也去試了一下:
個(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è)倉庫建好了劲妙,如圖:
每個(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è)試,至此停做,私有庫的玩法就介紹完畢了.