一、maven 倉(cāng)庫(kù)及私服介紹
- 什么是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 包。
- 什么是 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ù)。 - maven 私服的好處
(1)節(jié)省自己的外網(wǎng)寬帶;
(2)加速 maven 構(gòu)建;
(3)部署自己內(nèi)部的第三方構(gòu)件;
(4)提高穩(wěn)定性,增強(qiáng)控制;
(5)降低中央倉(cāng)庫(kù)的負(fù)荷; -
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目錄,
我們可以看到 bin 目錄下有一個(gè)核心的命令nexus,然后我們通過(guò)下面該命令啟動(dòng) nexus 服務(wù),啟動(dòng)后 maven 私服就搭建完成了。
./nexus start
然后在瀏覽器中輸入 localhost:8081,就會(huì)看到 nexus 首頁(yè),三、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
}
}
}
}