現(xiàn)如今已經(jīng)不是以前單兵作戰(zhàn)時(shí)代,越來越多的需求,促使我們項(xiàng)目去實(shí)現(xiàn)動(dòng)態(tài)組件化開發(fā)。
這個(gè)時(shí)候組件化發(fā)布共享就顯的尤為重要。
這篇文章我們就來講解下如何使用Maven進(jìn)行組件化發(fā)布
在講解組件化發(fā)布之前,我們先來了解一些基礎(chǔ)概念
基礎(chǔ)概念:
1.POM
pom:全名Project Object Model
項(xiàng)目對(duì)象模型,用來描述當(dāng)前maven
項(xiàng)目發(fā)布模塊的基礎(chǔ)信息
pom主要節(jié)點(diǎn)信息如下:
配置 | 描述 | 舉例('com.android.tools.build:gradle:4.1.1') |
---|---|---|
groupId |
組織 / 公司的名稱 | com.android.tools.build |
artifactId |
組件的名稱 | gradle |
version |
組件的版本 | 4.1.1 |
packaging |
打包的格式 | aar |
2.倉庫
我們?cè)陂_發(fā)中經(jīng)常使用到第二/三方插件或者第二/三方庫,就是存儲(chǔ)在倉庫中的
2.1:倉庫種類:
-
本地倉庫 :存儲(chǔ)在本地設(shè)備中的倉庫以及遠(yuǎn)程倉庫中下載保存的倉庫,統(tǒng)稱為本地倉庫
-
私有倉庫 :公司內(nèi)部倉庫,比如是有maven私服搭建的局域網(wǎng)倉庫
-
中央倉庫 :開源社區(qū)倉庫,我們平時(shí)使用的第三方插件或者類庫一般都存儲(chǔ)在中央倉庫,比如
Maven Central
,阿里的國(guó)內(nèi)鏡像庫等1.maven庫介紹.png
2.2:倉庫構(gòu)建順序:
- 1.在本地倉庫中查找對(duì)應(yīng)的類庫,沒有找到
執(zhí)行2
- 2.按照
repositories
中聲明的倉庫順序,在私有倉庫和中央倉庫查找對(duì)應(yīng)的類庫,找到則將類庫版本信息下載到本地倉庫,沒找到則執(zhí)行3
- 3.前面都沒找到對(duì)應(yīng)的類庫或者類庫版本,則拋出異常‘
沒找到對(duì)應(yīng)的類庫
’
倉庫執(zhí)行順序.awebp
2.3:倉庫聲明方式:
項(xiàng)目build.gradle:
buildscript {
repositories {
[Gradle 插件的倉庫]
}
}
allprojects {
repositories {
[項(xiàng)目中所有模塊依賴的倉庫]
}
}
模塊內(nèi)build.gradle:
repositories{
[當(dāng)前模塊依賴的倉庫]
}
gradle支持的倉庫類型:
repositories{
maven { url '...' }
ivy { url '...' }
flatDir { dirs '...' }
}
常用的中央倉庫:
google() // https://dl.google.com/dl/android/maven2/
mavenCentral() // https://repo.maven.apache.org/maven2/
jCenter()
網(wǎng)絡(luò)不好的情況下,訪問上面的中央倉庫會(huì)有點(diǎn)慢:可以開考慮使用國(guó)內(nèi)鏡像代理
maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
3.有了Release
版本為啥還需要SNAPSHOT
?
區(qū)別
:
- 1.Release版本每次升級(jí)都需要更新版本,而SNAPSHOT不需要更新版本,使用原版本即可
- 2.Release版本如果版本沒有更新不需要每次都去下載,除非本地倉庫被清除,而SNAPSHOT版本每次編譯都需要去中央倉庫更新版本信息
- 3.常規(guī)Release版本是發(fā)布上線的版本,SNAPSHOT是測(cè)試版本。
- 4.版本名:Release版本:1.0.0,SNAPSHOT版本:1.0.0-SNAPSHOT
使用場(chǎng)景
:
A和B共同開發(fā),如果A修改了代碼,
使用常規(guī)Release版本則需要每次都發(fā)布一個(gè)新版本,如果不小心忘記增加版本,B則無法收到更新后的版本,
造成代碼不同步,后期會(huì)出現(xiàn)不可預(yù)料的bug。
使用SNAPSHOT只要A發(fā)布了版本,B在每次編譯時(shí)就可以立即收到A的類庫更新信息,可以實(shí)時(shí)同步代碼。
SNAPSHOT以犧牲編譯時(shí)間換取代碼之間的立即可見度
,缺點(diǎn)就是在網(wǎng)絡(luò)較差的情況下代碼編譯時(shí)間可能常常比較慢。
如何發(fā)布組件:
1.發(fā)布到本地倉庫:
模塊級(jí):build.gradle
plugins {
id 'groovy' // Groovy Language
// id 'org.jetbrains.kotlin.jvm' // Kotlin
id 'java-gradle-plugin' // Java Gradle Plugin
id 'maven'
}
...
uploadArchives {
repositories {
mavenDeployer {
repository(url:uri('D:/maven_local'))
pom.groupId = 'com.yuhb.upload'
pom.artifactId = 'upload'
pom.version = '1.0.1'
}
}
}
同步模塊后:點(diǎn)擊Gradle面板中對(duì)應(yīng)模塊下Tasks:upload
里面的uploadArchives
任務(wù)
如果執(zhí)行成功:則會(huì)在對(duì)應(yīng)的本地目錄下找到類庫信息:
2.搭建maven私服創(chuàng)建私有倉庫:
簡(jiǎn)介
maven
私服其實(shí)就是在部門·局域網(wǎng)·中設(shè)置一個(gè)maven
倉庫,所有在局域網(wǎng)中的開發(fā)人員都可以使用該倉庫:
PS:私服中可以添加自己本地的倉庫,也可以代理中央倉庫
中的包。畢竟對(duì)于一些網(wǎng)絡(luò)比較差的環(huán)境,去中央倉庫里面獲取數(shù)據(jù)是一個(gè)很耗時(shí)的操作
優(yōu)點(diǎn)
1.節(jié)省自己的外部帶寬:
2.加速構(gòu)建過程
3.可以部署第三方構(gòu)件
4.提高穩(wěn)定性,增強(qiáng)控制
5.降低中央倉庫的負(fù)荷
maven私服優(yōu)勢(shì).png
如何搭建Maven私服
1.去官網(wǎng)下載
maven私服啟動(dòng)器 nexus
:
2.下載后,配置環(huán)境變量
后:
在命令行輸入:nexus /run
3.nexus啟動(dòng)成功后:在瀏覽器中輸入:
http://localhost:8081/
- 啟動(dòng)界面如下:
2.nexus界面.png
點(diǎn)擊右上角的sign in
按鈕:
輸入用戶名和密碼
:
用戶名和密碼系統(tǒng)會(huì)提示在哪個(gè)目錄下
4.登錄成功后:
- 點(diǎn)擊導(dǎo)航欄的設(shè)置按鈕-->repository進(jìn)入倉庫列表
3.倉庫搭建.png
4倉庫.png
- 點(diǎn)擊
create Repository
創(chuàng)建一個(gè)新的本地局域網(wǎng)倉庫:
因?yàn)槲覀兪菫锳ndroid項(xiàng)目創(chuàng)建的maven倉庫選擇maven2:
這里有三個(gè)maven2類型倉庫:
*hosted*
:本地局域網(wǎng)私服,像官方倉庫一樣,提供本地私庫功能
*proxy*
:提供代理其他倉庫的功能,表示這個(gè)repository可以代理遠(yuǎn)程倉庫,比如jcenter
google
等遠(yuǎn)程中央倉庫
*group*
:組合多個(gè)倉庫為一個(gè)地址使用
這里我們選擇
hosted
倉庫即可,大家可以根據(jù)自己需求選取
1.輸入倉庫名稱
2.設(shè)置maven類型:
*release*
:表示是一個(gè)該倉庫存儲(chǔ)的是一個(gè)release版本的第三方庫
*snapshot*
:表示存儲(chǔ)的是一個(gè)不穩(wěn)定第三方庫,需要進(jìn)程去私服或者中央倉庫拉數(shù)據(jù):
****class="hljs-name"id>
***class="hljs-name"url>
trueclass="hljs-name"enabled>
(always/ daliy/ interval/ never)class="hljs-name"updatePolicy>
class="hljs-name"snapshot>
class="hljs-name"repository>
class="hljs-name"repository>
updatePolicy
:表示更新的頻率:
`always`:每次都需要拉去 ` daliy`:表示每天需要拉取 ` interval`:按分鐘拉取 ` nerver`:和release版本一樣,不需要重復(fù)拉取
點(diǎn)擊確定后就創(chuàng)建的一個(gè)maven私服:
點(diǎn)擊該倉庫就可以看到對(duì)應(yīng)的url,這個(gè)url就是我們私服的地址。需要在項(xiàng)目中引用:
經(jīng)過上面的步驟后,我們就搭建好了一個(gè)maven
私服,局域網(wǎng)內(nèi)
用戶都可以拉取使用
-
開發(fā)
+關(guān)注
關(guān)注
0文章
370瀏覽量
40843 -
maven
+關(guān)注
關(guān)注
0文章
30瀏覽量
3712 -
gradle
+關(guān)注
關(guān)注
0文章
26瀏覽量
717
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論