一、場景
① 公司中有多個項目,多人開發,開發中的某一模塊需要被其他幾個項目的模塊所依賴,最簡單粗暴的方式就是打包成aar或者jar文件逐個拷貝到libs下進行依賴,可是這種方式太過於麻煩,而且需要每次都得更新代碼。如果有多個這樣的庫就更麻煩了。所以根據項目規模和需求,為了加快團隊開發效率,搭建一個Maven私服就很有必要了。
二、搭建
通過Rexus可以快速方便的搭建一個Maven私服,本篇就講述通過Rexus搭建Maven私服並上傳庫文件,以及升級庫文件。要開始搭建,首先要下載Rexus:
官網地址 : https://www.sonatype.com/download-oss-sonatype
網盤鏈接: https://pan.baidu.com/s/1A7RW_PEh4KuB1w4xpfaaYQ 密碼: uyev (Window x64)
安裝步驟:(不同版本安裝的方式會有區別,這個是針對 3.x版本的)
① 下載好的壓縮包,進行減壓,以管理身份運行cmd,進入到減壓后nexus.exe所在目錄,鍵入nexus.exe /install 安裝Nexus服務。

② 打開瀏覽器,打開地址 http://localhost:8081/ ,看到下圖界面則表示服務啟動成功。如果沒有啟動成功,就需要查看服務是否正常啟動。

如果需要更改Nexus的配置,可以在這個文件中更改:

③ 啟動成功后,需要登陸賬號,默認賬號 / 密碼: admin / admin123 , 登陸成功以后就要創建我們的maven庫,去放置我們的庫文件。
④ 登陸成功,創建 repository

1)創建過程中需要選擇創建的類型,下面看一下類型區別:
| 倉庫類型 | 說明 |
| proxy |
遠程倉庫的代理。比如說在nexus中配置了一個central repository的proxy,當用戶向這個proxy請求一個artifact,這個proxy就會先在本地查找,如果找不到的話,就會從遠程倉庫下載,然后返回給用戶,相當於起到一個中轉的作用 |
| hosted | 宿主倉庫,用戶可以把自己的一些構件,deploy到hosted中,也可以手工上傳構件到hosted里。 |
| group | 倉庫組,在maven里沒有這個概念,是nexus特有的。目的是將上述多個倉庫聚合,對用戶暴露統一的地址,這樣用戶就不需要在pom中配置多個地址,只要統一配置group的地址就可以了 |
根據目前的需求,我們只是要把自己的一些構件放到私庫里,所以選擇的類型是hosted類型。
2) 創建過程中需要必須操作的一點是:必須更改disable redeploy ——> allow redeploy

3) Artifact type : release \ snapshot
release : 構建的時候構建工具會先在本次倉庫中查找是否已經有了這個依賴庫,如果沒有的話才會去遠程倉庫中去拉取
snapshot:會優先去遠程倉庫中查看是否有最新,如果有則下載下來使用,即使本地倉庫中已經有了。
到這里nexus搭建maven私服已經基本完畢,剩下的就是要把我們的 library庫文件放置到我們已經建好的私服里,並添加依賴使用。
三、使用私有倉庫
上面我們創建了reader倉庫,倉庫地址為 http://localhost:8081/repository/reader。如果把 nexus 安裝在了局域網服務器,基本類似,只是倉庫地址中的 localhost 改為局域網服務器 ip 。
① 上傳庫文件
比如我們Android項目中的一個library公共組件,要上傳到私庫上供其他項目依賴使用。我們需要做的配置:
1. 在該library項目的gradle.properties添加以下配置:
# maven local config maven_local_url=http://192.168.142.26:8081/repository/reader/ maven_local_username=admin maven_local_password=admin123 #common utils maven_pom_version=1.0.0 maven_pom_groupid=com.dboy maven_pom_artifactId=reader maven_pom_packaging=aar maven_pom_description=dboy reader
#maven_pom_archives_file=libs/CommonUtils.jar 上傳某一個jar
說明 :
- maven_local_url maven倉庫中相應repository的地址
- maven_local_username 上傳類庫到倉庫的用戶名
- maven_local_password 上傳類庫到倉庫的密碼
- maven_pom_version 要上傳的類庫的版本號
- maven_pom_groupid 類庫的分組標記,一般使用公司名或包名即可
- maven_pom_artifactId 類庫的名稱
- maven_pom_packaging 類庫的格式可以支持 jar ,aar , so 等
- maven_pom_description 類庫描述
- maven_pom_archives_file 類庫文件在項目中的位置(相對於 build.gradle)
2. 在相應類庫所在的 module 的 build.gradle 增加上傳類庫的 task
uploadArchives {
repositories {
mavenDeployer {
repository(url: maven_local_url) {
authentication(userName: maven_local_username, password: maven_local_password)
}
pom.project {
version maven_pom_version
artifactId maven_pom_artifactId
groupId maven_pom_groupid
packaging maven_pom_packaging
description maven_pom_description
}
}
}
}
/* artifacts {
archives file(maven_pom_archives_file)
} */
說明 :
- artifacts 中可以指定要上傳的 jar 或 aar 的路徑,為統一配置都由 gradle.properties 的屬性 maven_pom_archives_file 指定
- 如果只需要上傳項目編譯時產生的 aar,artifacts 可以省略,因為 artifacts 默認就包含了編譯產生的 aar 或 apk
3. 運行上傳類庫的 task 即可把相應類庫上傳到倉庫 reader ——> gradle uploadArchives ,雙擊運行

上傳成功應該就可以看到上傳的類庫了。

4. 使用上傳的類庫
在需要依賴上傳類庫的項目build.gradle文件添加:
allprojects {
repositories {
jcenter()
maven { url 'http://192.168.142.26:8081/repository/reader/' }
}
}
在module的build.gradle中就可以像其他的第三方庫一樣使用:
compile 'com.dboy:reader:1.0.0'
這樣我們就可以使用了,很開心伐。但是這個類庫是我們自己開發,肯定需要不斷去更新,那也就必須要更新私服里的代碼,所以接下來說一下更新.
四、更新私有倉庫
如果類庫需要更新版本,基本操作同上。
比如類庫 reader有了新版本為 2.0.0 ,修改 gradle.properties 配置如下(只需要修改版本號,其他不用修改)
maven_pom_version=2.0.0
然后執行 gradle uploadArchives 任務即可
類庫更新版本后,不更改 gradle 配置文件自動獲取最新類庫,添加依賴的方式需要這樣添加:(每次都從maven獲取最新代碼)
dependencies {
compile 'com.dboy:reader:1.+'
}
或者
dependencies {
compile 'com.dboy:reader:+'
}
五、參考
六、總結
多個項目使用同一個library,打包成aar ,以前不怕麻煩的就都拷貝了。(這種方式可以看這篇)結果面試的時候,被問到為什么不搭建一個私服呢。呵,被嫌棄了。不能怕麻煩的勤快。
