三、maven 私服搭建

一、maven 倉(cāng)庫(kù)及私服介紹

  1. 什么是maven 倉(cāng)庫(kù)?
    maven 是基于項(xiàng)目對(duì)象模型(POM),可以通過(guò)一小段描述信息來(lái)管理項(xiàng)目的構(gòu)建,報(bào)告和文檔的軟件項(xiàng)目管理工具。

maven 主要負(fù)責(zé)統(tǒng)一開(kāi)發(fā)規(guī)范與工具和統(tǒng)一管理 jar 包。

  1. 什么是 maven 私服?
    私服是一種特殊的遠(yuǎn)程倉(cāng)庫(kù),它是架設(shè)在局域網(wǎng)內(nèi)的倉(cāng)庫(kù)服務(wù),私服代理廣域網(wǎng)上的遠(yuǎn)程倉(cāng)庫(kù),供局域網(wǎng)內(nèi)的用戶使用。當(dāng) maven 需要下載構(gòu)件的時(shí)候,它從私服請(qǐng)求,如果私服上不存在該構(gòu)件,則從外部遠(yuǎn)程倉(cāng)庫(kù)下載,緩存在私服上之后,再為 maven 的下載請(qǐng)求提供服務(wù)。
  2. maven 私服的好處
    (1)節(jié)省自己的外網(wǎng)寬帶;
    (2)加速 maven 構(gòu)建;
    (3)部署自己內(nèi)部的第三方構(gòu)件;
    (4)提高穩(wěn)定性,增強(qiáng)控制;
    (5)降低中央倉(cāng)庫(kù)的負(fù)荷;
  3. maven 倉(cāng)庫(kù)體系結(jié)構(gòu)


    maven倉(cāng)庫(kù).png

    maven 倉(cāng)庫(kù)分為兩類:本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)。
    當(dāng) maven 根據(jù)坐標(biāo)尋找構(gòu)件的時(shí)候,它首先會(huì)查看本地倉(cāng)庫(kù),如果本地倉(cāng)庫(kù)存在此構(gòu)件,則直接使用;如果本地倉(cāng)庫(kù)不存在此構(gòu)件,maven 就會(huì)去遠(yuǎn)程倉(cāng)庫(kù)查找,發(fā)現(xiàn)需要的構(gòu)件,下載到本地倉(cāng)庫(kù)再使用。如果本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)都沒(méi)有,maven 就會(huì)報(bào)錯(cuò)。

二、maven 私服搭建流程

大家可以去官網(wǎng)下載,這里我分享一個(gè)云盤鏈接,可以下載。
https://pan.baidu.com/s/1kD-JphCsBpmr8TR8OlgNaA
首先,進(jìn)入到剛才下載的nexus文件下的bin目錄,

屏幕快照 2019-10-24 上午9.41.11.png

我們可以看到 bin 目錄下有一個(gè)核心的命令nexus,然后我們通過(guò)下面該命令啟動(dòng) nexus 服務(wù),啟動(dòng)后 maven 私服就搭建完成了。

./nexus start

然后在瀏覽器中輸入 localhost:8081,就會(huì)看到 nexus 首頁(yè),

然后輸入用戶名:admin,密碼:admin123,登錄成功后,可以看到倉(cāng)庫(kù)里的內(nèi)容,點(diǎn)擊 Repository 可以創(chuàng)建倉(cāng)庫(kù)。

三、maven 私服接入

首先在根目錄下的 gradle 文件中添加 maven 私服地址,

buildscript {
    repositories {
        google()
        jcenter()
        mavenCentral()
        maven {
            //私服的地址
            uri 'http://localhost:8081/repository/music-release/'
            //因?yàn)樗椒怯杏脩裘兔艽a的,所以在此配置上用戶名和密碼
            credentials(
                    username: 'admin',
                    password: 'admin123'
            )
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
        
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

這只是給 gradle 的構(gòu)建添加的倉(cāng)庫(kù),下面還需要給 android 工程添加倉(cāng)庫(kù),

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
        maven {
            //私服的地址
            uri 'http://localhost:8081/repository/music-release/'
            //因?yàn)樗椒怯杏脩裘兔艽a的,所以在此配置上用戶名和密碼
            credentials(
                    username: 'admin',
                    password: 'admin123'
            )
        }
        
    }
}

接著在根目錄下的 gradle.properties 配置上傳代碼,

NEXUS_REPOSITORY_URL=http://localhost:8081/repository/music-release/
POM_GROUPID=com.music.android
POM_PACKAGING=aar
NEXUS_USERNAME=admin
NEXUS_PASSWORD=admin123

其中 NEXUS_REPOSITORY_URL 是 maven 私服地址;
POM_GROUPID 是 maven 私服組織名,一般都以公司名命名,如果阿里巴巴就是com.alibaba.android;
然后在我們 app 下的 gradle 中依賴 maven,并定義一些變量,添加uploadArchives配置。

apply plugin: 'com.android.library'
apply plugin: 'maven'

def pomName = this.getName()
def pomVersion = '1.0.0-SNAPHOT'
def pomDescritpion = 'the audio library for all projects'

android {
    compileSdkVersion 28
    buildToolsVersion "29.0.1"


    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:28.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

uploadArchives{
    resporitories{
        mavenDeployer{
            resporitory(url:NEXUS_REPOSITORY_URL){
                authentication(username:NEXUS_USERNAME,password:NEXUS_PASSWORD)
            }
            pom.project{
                name pomName
                version pomVersion
                description pomDescritpion
                artifactId pomVersion
                groupId POM_GROUPID
                packaging POM_PACKAGING
            }
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 前言 在Android開(kāi)發(fā)中,會(huì)經(jīng)常遇到需要將寫好的某個(gè)lib用于各個(gè)不同的項(xiàng)目中。一般的做法,就是將lib直接導(dǎo)...
    碼途有道閱讀 4,401評(píng)論 5 20
  • 首先私服是一種衍生出來(lái)的特殊的Maven遠(yuǎn)程倉(cāng)庫(kù),構(gòu)建私服的好處請(qǐng)看3.5私服 可以幫助大家建立私服的倉(cāng)庫(kù)管理軟件...
    zlcook閱讀 10,606評(píng)論 0 32
  • 五. 倉(cāng)庫(kù) 在Maven中,任何一個(gè)依賴、插件或者項(xiàng)目構(gòu)建的輸出,都可以稱之為 構(gòu)件。Maven在某個(gè)統(tǒng)一的位置存...
    wind_sky閱讀 1,504評(píng)論 0 0
  • 在 Maven 的術(shù)語(yǔ)中,倉(cāng)庫(kù)是一個(gè)位置(place)。Maven 倉(cāng)庫(kù)是項(xiàng)目中依賴的第三方庫(kù),這個(gè)庫(kù)所在的位置叫...
    41uLove閱讀 7,110評(píng)論 2 3
  • 目前版本已經(jīng)更新到了3.X下載地址:https://www.sonatype.com/download-oss-s...
    yunqing_71閱讀 2,372評(píng)論 0 0