原文發於微信公眾號 jzman-blog,歡迎關注交流。
前面幾篇文章學習了 Gradle 相關知識,Gradle 系列文章如下:
- Gradle系列之初識Gradle
- Gradle之Groovy基礎篇
- Gradle系列之構建腳本基礎
- Gradle系列之認識Gradle任務
- Gradle系列之Gradle插件
- Gradle系列之Java Gradle插件
- Gradle系列之Android Gradle插件
- Gradle系列之Android Gradle基礎配置
- Gradle系列之Android Gradle高級配置
今天的內容是使用 Nexus Repository Manager 搭建 Maven 私服庫,這樣可以將一些通用的庫項目提取出來供其他項目使用,如工具庫、基本組件庫等,下面將從零開始搭建 Maven 私服庫,
- 安裝Nexus服務
- 運行Nexus服務
- 發布庫項目
- 使用庫項目
- 總結
安裝Nexus服務
在如下地址下載 Nexus 安裝包:
http://www.sonatype.com/download-oss-sonatype
選擇適合自己的版本進行下載,如這里選擇的是 nexus-3.13.0-01-win64,下載完成之后解壓,有兩個文件夾如下:
//nexus服務
nexus-3.13.0-01
//nexus相關配置文件,如日志、倉庫、索引、緩存等配置文件
sonatype-work
然后打開 cmd 命令提示符以管理員方法運行,進入 Nexus 服務解壓目錄下的 bin 目錄下執行如下命令來安裝 Nexus 服務,參考如下:
nexus.exe/install
執行完成后 Nexus 服務就安裝完成了,安裝 Nexus 服務成功執行結果參考如下:
E:\Gradle\Nexus\nexus-3.13.0-01-win64\nexus-3.13.0-01\bin>nexus.exe/install
Installed service 'nexus'.
運行Nexus服務
安裝完成 Nexus 服務之后執行如下命令來運行 Nexus 服務,參考如下:
nexus.exe/run
執行該命令會啟動 Nexus 服務,執行成功的關鍵信息如下:
E:\Gradle\Nexus\nexus-3.13.0-01-win64\nexus-3.13.0-01\bin>nexus.exe/run
Preparing JRE ...
2018-09-10 23:02:21,265+0800 INFO [FelixStartLevel] *SYSTEM org.sonatype.nexus.pax.logging.NexusLogActivator - start
//...
-------------------------------------------------
Started Sonatype Nexus OSS 3.13.0-01
-------------------------------------------------
//...
當 Nexus 服務正常啟動之后,可使用如下地址訪問 Nexus 服務,具體如下:
http://localhost:8081/
運行結果如下所示:

創建倉庫
使用默認賬戶名 admin 和默認密碼 admin123 登錄成功之后,然后選擇設置(小齒輪),在左側選擇 Security->Users,然后選擇創建用戶 Create local user 輸入相關信息賬號創建完成,然后使用剛才創建的新賬號登錄,然后就可以在自己的賬號下面創建倉庫了,可參考下圖:

發布庫項目
倉庫創建好了之后就可以發布項目到倉庫中了,這里首先使用 Android Studio 創建一個庫項目 test,然后在其 build.gradle 文件中配置上傳該庫的 Task,看一下該庫使用的插件:
//使用Android Library插件
apply plugin: 'com.android.library'
//使用maven插件
apply plugin: 'maven'
//Upload Task用於發布上傳
uploadArchives{
repositories{
mavenDeployer{
//正式發布倉庫
// repository(url:"http://localhost:8081/repository/jzman-releases/"){
// authentication(userName:"jzman",password:"nexus2410.")
// }
//快照版本的倉庫
snapshotRepository(url:"http://localhost:8081/repository/jzman-snapshots/"){
authentication(userName:"jzman",password:"nexus2410.")
}
pom.project {
//版本號,如果是快照版本,其版本號后面應該添加-SNAPSHOT,否則不能正常識別上傳
version '1.0.0-SNAPSHOT'
//一般寫項目名稱即可
artifactId 'testWidget'
//組別,類似包名,保證唯一性
groupId 'com.manu.test'
//打包格式
packaging 'aar'
//描述
description '測試maven私服搭建'
}
}
}
}
//...
配置完用於上傳庫項目的 task 之后,就可以根據需要上傳到之前創建的對應倉庫中了,執行上傳 task 可使用 Android Gradle 提供的快捷方式,如下圖所示:

等待 uploadArchives 執行完畢后對應的庫項目就發布到對應的倉庫了,下面是發布到了正式倉庫,如下圖所示:

正式版發布每次必須的更改版本號,否則不能發布成功,下面是發布到了快照倉庫,如下圖所示:

如果將庫項目發布到快照倉庫中,可以多次上傳發布,每次不需要修改版本號,它會自己維持在原來版本號的基礎上自增,如 1.0.0-時間戳-1、1.0.0-時間戳-2等,實際使用時還是用版本號 1.0.0-SNAPSHOT,使用時 Maven 會自動下載最新的快照版本,也就是序號最大的快照版本,這種方式便於將庫項目發現的問題及時發布上去,有助於快速迭代,等到沒有問題就可以發布正式版本了。
使用庫項目
庫項目是發布成功之后,就可以在任意的項目中使用這個庫項目了,在項目下的 build.gradle 文件中配置項目使用的 Maven 倉庫:
//...
allprojects {
repositories {
//...
//配置maven倉庫
maven {
url 'http://localhost:8081/repository/jzman-releases/'
}
}
}
//...
然后,在具體的項目中就可以配置對應依賴就可以使用這個庫項目了,配置依賴如下:
dependencies {
//...
//配置依賴庫項目
compile 'com.manu.test:testWidget:1.0.0'
}
總結
本篇文章的主要內容就是在本地搭建一個可用的 Maven 私服庫,實際開發中只需根據上述內容將對應的倉庫地址更換為自己公司的倉庫地址即可,其他如 jcenter 庫的搭建也類似,這篇文章的內容就到此為止。

