一、什么是maven
Maven是基于POM(工程對象模型),通過一小段描述(pom.xml)來對項目的代碼、報告文件進管理的工具。
- 構(gòu)建工具:通過簡單的命令,能夠完成清理、編譯、測試、打包、部署等一系列過程。
- 依賴管理工具:項目依賴的第三方的開源類庫,都可以通過依賴的方式引入到項目中來。代替了原來需要首先下載第三方j(luò)ar,再加入到項目中的方式。從而更好的解決了合作開發(fā)中依賴增多、版本不一致、版本沖突、依賴臃腫等問題。
- 項目信息管理工具:能夠管理項目描述、開發(fā)者列表、版本控制系統(tǒng)地址、許可證等一些比較零散的項目信息。除了直接的項目信息,通過Maven自動生成的站點,以及一些已有的插件,還能夠輕松獲得項目文檔、測試報告、靜態(tài)分析報告、源碼版本、日志報告等非常具有價值的項目信息。
二、maven倉庫體系結(jié)構(gòu)

三、maven優(yōu)勢

四、maven私服搭建
Nexus是私服的一種,maven私服搭建借助于它來實現(xiàn)。
https://help.sonatype.com/repomanager3/download
下載的最新版本nexus-3.19.1-01
啟動
? bin ./nexus start
Starting nexus
http://localhost:8081/ 進入
用戶名:admin
密碼:? sonatype-work/nexus3/ vim admin.password
創(chuàng)建maven倉庫

進去選擇maven2(hosted)類型即可
最終生成maven倉庫

image.png
五、實戰(zhàn)項目接入maven私服
1.主工程gradle配置
buildscript {
//這里只是為gradle構(gòu)建引入maven
repositories {
google()
jcenter()
mavenCentral()
//release
maven {
//配置私服地址
url'http://localhost:8081/repository/stan_releases/'
//配置私服賬號名、密碼
credentials{
username ‘a(chǎn)dmin'
password ‘XXX'
}
}
//snapshot
maven {
url'http://localhost:8081/repository/stan_snapshot/'
credentials{
username ‘a(chǎn)dmin'
password ‘XXX'
}
}
}
//java工程引入maven
allprojects {
repositories {
google()
jcenter()
//release
maven {
//配置私服地址
url'http://localhost:8081/#admin/repository/stan_releases/'
//配置私服賬號名、密碼
credentials{
username 'admin'
password 'XXX'
}
}
//snapshot
maven {
url'http://localhost:8081/repository/stan_snapshot/'
credentials{
username 'admin'
password 'XXX'
}
}
}
}
2.gradle.properties變量定義
#倉庫地址
NEXUS_REPOSITORY_URL=http://localhost:8081/repository/stan_snapshots/
#上傳的maven倉庫的group組織名
POM_GROUPID=com.stan.android
#package類型 Android工程庫對應aar Java工程對應Jar
POM_PACKAGING=aar
#賬號、密碼
NEXUS_USERNAME=admin
NEXUS_PASSWORD=XXX
3.對應lib模塊gradle上傳腳本編寫
//引入maven插件
apply plugin: 'maven' //引入maven插件才會有uploadArchives配置
//變量定義
def pomName = this.getName() //當前工程名
def pomVersion = '1.0.0-SNAPSHOT'
def pomDescription = 'the audio library for all projects'
//上傳腳本編寫
uploadArchives {
repositories {
mavenDeployer {
repository(url: NEXUS_REPOSITORY_URL) {
authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
}
pom.project { //變量定義
name pomName
version pomVersion
description pomDescription
artifactId pomVersion
groupId POM_GROUPID
packaging POM_PACKAGING
}
}
}
}
最后sync下gradle,查看對應lib模塊的gradle task會新增upload,雙擊uploadArchives就會將當前l(fā)ib模塊上傳到mave倉庫中。
