利用nexus搭建Android的maven私服
前言
maven是一個構建和管理專案的工具,做java的同學肯定不陌生,在Android中,預設採用的是gradle進行的構建,實際上很多gradle上的三方庫也是放在maven倉庫的。
在日常的android開發中,隨著專案的日益增大,編譯越來越慢,程式碼間的耦合越來越緊,相互之間的影響越來越大,而我們又不想將自己的程式碼放到jcenter等公開的倉庫,這時候我們可以利用maven私服,將一部分程式碼抽成二方庫和三方庫,這樣方便專案整合和管理。
想要上傳二方庫到maven,首先我們需要有一個自己的maven私服,如果公司已經有maven倉庫了,大家可以直接跳到第二部分。
搭建私服
我這裡的本地環境是win10,所以以windows為例,大家選擇對應的版本即可。
解壓壓縮包,可以發現壓縮包中有兩個資料夾:nexus-3.5.1-02
和sonatype-work
,利用命令列cd到nexus-3.5.1-02
目錄下的bin資料夾,與2.X版本不同,3.X版本簡化了啟動步驟,其中nexus.exe就是我們需要的啟動入口,輸入命令.\nexus.exe /run
,即可啟動服務,如果啟動成功的話,應該會顯示這樣:
這裡需要主意,nexus需要oracle的JDK,openjdk是不行的,而且nexus.exe無法通過雙擊,或者右鍵管理員身份執行等方式開啟。
啟動成功以後,我們可以通過連結:
http://localhost:8081
介面如下:
點選右上角的登陸按鈕,預設的登陸賬號和密碼是admin, admin123,然後點選配置頁面的users,為我們android的上傳新建一個使用者。
建立使用者資訊,大致如圖所示:
這裡注意一下status 和 granted許可權。建立成功以後,我們即可使用新建的使用者進行登陸。
緊接著,我們建立自己的respository,點選
由於我們是自己內部使用,所以選擇maven2(hosted)即可,基本配置如下圖即可:
建立成功以後,我們即可在components找到自己的建立的倉庫了。
至此,我們的倉庫已經建立完畢!(這裡以我之前的andorid-host為例)
android上傳
我們為了將程式碼抽成二方庫和三方庫,建議單獨將這些抽離的程式碼作為一個工程進行開發,這樣可以儘量減少對原工程的依賴。
我們新建一個工程,然後在工程目錄下新建一個android library.
接下來,我們準備gradle指令碼,進行上傳:
新建gradle.properties配置檔案
在library下,新建gradle.properties檔案,主要存放一些我們的配置項:
VERSION=1.0
GROUP_ID=com.maven.studo.library
ARTIFACT_ID=test
RELEASE_URL=http://127.0.0.1:8081/repository/android-host/
SNAPSHOT_URL=http://127.0.0.1:8081/repository/android-host/
NAME=cytus
PASSWORD=123123123
修改內容為自己新建倉庫和使用者時的資訊。
新建上傳指令碼maven_push.gradle
在library下,新建上傳指令碼:maven_push.gradle
指令碼內容如下:
apply plugin: 'maven'
apply plugin: 'signing'
configurations {
deployerJars
}
repositories {
mavenCentral()
}
// 判斷版本是Release or Snapshots
def isReleaseBuild() {
return !VERSION.contains("SNAPSHOT");
}
// 獲取倉庫url
def getRepositoryUrl() {
return isReleaseBuild() ? RELEASE_URL : SNAPSHOT_URL;
}
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment {
MavenDeployment deployment -> signing.signPom(deployment)
}
pom.version = VERSION
pom.artifactId = ARTIFACT_ID
pom.groupId = GROUP_ID
repository(url: getRepositoryUrl()) {
authentication(userName: NAME, password: PASSWORD) // maven授權資訊
}
}
}
}
// 進行數字簽名
signing {
// 當 釋出版本 & 存在"uploadArchives"任務時,才執行
required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
sign configurations.archives
}
然後將改指令碼匯入library的構建過程:
在library下的build.gradle中,在
apply plugin: 'com.android.library'
下加入一行:
apply from: 'maven_push.gradle'
上傳
sync一下,然後你就會在這裡發現多了一個上傳的選項,
雙擊執行即可。
上傳成功之後,就可以在你建立的倉庫裡看到上傳的檔案了:
專案依賴
專案依賴就比較簡單了,我們在專案根目錄下的build.gradle檔案中新增我們的倉庫:
然後就像依賴普通三方庫一樣,在app的build.gradle下新增依賴:
compile 'com.maven.studo.library:test:1.0'
sync一下,就可以發現,我們已經依賴到了我們在倉庫的程式碼了!
至此,我們的maven私服已經大功告成!