1. 程式人生 > >利用nexus搭建Android的maven私服

利用nexus搭建Android的maven私服

前言

maven是一個構建和管理專案的工具,做java的同學肯定不陌生,在Android中,預設採用的是gradle進行的構建,實際上很多gradle上的三方庫也是放在maven倉庫的。

在日常的android開發中,隨著專案的日益增大,編譯越來越慢,程式碼間的耦合越來越緊,相互之間的影響越來越大,而我們又不想將自己的程式碼放到jcenter等公開的倉庫,這時候我們可以利用maven私服,將一部分程式碼抽成二方庫和三方庫,這樣方便專案整合和管理。

想要上傳二方庫到maven,首先我們需要有一個自己的maven私服,如果公司已經有maven倉庫了,大家可以直接跳到第二部分。

搭建私服

可供下載的平臺

我這裡的本地環境是win10,所以以windows為例,大家選擇對應的版本即可。

解壓壓縮包,可以發現壓縮包中有兩個資料夾:nexus-3.5.1-02sonatype-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

訪問到我們啟動好的倉庫。這裡8081的埠可能會被佔用,我們可以通過修改nexus的預設埠來修復。

介面如下:
這裡寫圖片描述

點選右上角的登陸按鈕,預設的登陸賬號和密碼是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私服已經大功告成!