如需轉(zhuǎn)載請(qǐng)標(biāo)明出處:
http://blog.csdn.net/u011974987/article/details/52372185
首發(fā)于CSDN出自:【徐Xiho的博客】
前言:
隨著業(yè)務(wù)的增長(zhǎng)咱圆,需求量增多,我們的App 組件也越來越多,幾乎大部分組件都有用到同樣的第三方庫和公司內(nèi)部封裝的庫,而團(tuán)隊(duì)中的所有人都重復(fù)的從maven 遠(yuǎn)程的中央倉庫下載構(gòu)建,這樣就會(huì)加大了倉庫的負(fù)載和浪費(fèi)了外網(wǎng)的帶寬石挂,網(wǎng)速慢的話,就要等很久很久,半個(gè)小時(shí)称诗,幾個(gè)小時(shí),都有可能头遭!這樣明顯影響項(xiàng)目的開發(fā)進(jìn)度寓免,有的公司還是在內(nèi)網(wǎng)的情況下開發(fā),連接不到中央倉庫怎么辦计维?公司內(nèi)部開發(fā)的公共組件怎么讓其他項(xiàng)目共用呢袜香?這個(gè)時(shí)候,我們不得不為自己的團(tuán)隊(duì)搭建一個(gè)私服maven倉庫鲫惶,來提高我們的開發(fā)效率蜈首。
起初,對(duì)gradle和maven不是很熟剑按,看了網(wǎng)上的教程一臉懵逼疾就,后來,花了點(diǎn)時(shí)間艺蝴,發(fā)現(xiàn)整個(gè)過程也還是很簡(jiǎn)單的猬腰。↓↓
首先我們來了解一下猜敢,
一姑荷、什么是Maven,Gradle?
Maven 是一個(gè)項(xiàng)目管理和自動(dòng)構(gòu)建工具。Maven 包集中存放的地方缩擂,就是 Maven 倉庫鼠冕。這些倉庫,可以是放在本地胯盯,也可以放在某個(gè)遠(yuǎn)程服務(wù)器上懈费。 可以是私有倉庫,也可以是公開的博脑。下開發(fā)用的庫列表:
mavenCentral();
jcenter()
maven {
url 'file:///Users/my-user-name/Documents/Android/repo/'
}
maven {
url 'http://localhost:8081/nexus/content/repositories/releases/'
}
Android Studio Gradle 主要支持兩個(gè) Maven 中央庫:mavenCentral 和 jcenter憎乙。
- mavenCentral 是最早的 maven 中央倉庫
- jcenter 是 Android Studio 0.8 版本起的默認(rèn) maven 中央倉庫
- 第三個(gè)是我的本機(jī)的倉庫
- 第四個(gè)是筆者部署在內(nèi)網(wǎng)服務(wù)器的私有倉庫
Gradle 是一個(gè)基于Apache Ant和Apache Maven概念的項(xiàng)目自動(dòng)化建構(gòu)工具票罐。它使用一種基于Groovy的特定領(lǐng)域語言來聲明項(xiàng)目設(shè)置,而不是傳統(tǒng)的XML
**二泞边、使用Nexus搭建maven私服 **
1.Nexus 下載安裝:
官網(wǎng)下載地址:http://www.sonatype.org/nexus/go/该押,我的開發(fā)環(huán)境是Windows,我下載的是Nexus Repository Manager OSS 2.xx下面的 All platforms nexus-2.13.0-01-bundle.zip壓縮文件阵谚〔侠瘢↓
2.Nexus 啟動(dòng):
下載完成之后,解壓后進(jìn)入\nexus-2.1.2-bundle\nexus-2.1.2\bin\jsw\梢什,根據(jù)操作系統(tǒng)類型選擇文件夾奠蹬,我選的是windows-x86-32文件夾,進(jìn)入后可看到如下所示bat文件绳矩。
雙擊console-nexus.bat運(yùn)行罩润。再瀏覽器中輸入http://127.0.0.1:8081/nexus/,出現(xiàn)圖(2)所示就代表nexus已經(jīng)啟動(dòng)成功了翼馆。
圖(2)
8081是默認(rèn)的端口號(hào)割以,要修改端口號(hào),進(jìn)入\conf\打開nexus.properties文件应媚,修改application-port屬性值就可以了严沥。
默認(rèn)的用戶名和密碼分別是:admin和admin123。點(diǎn)擊右上角的log in 登錄后如圖所示:
點(diǎn)擊左側(cè)的 repositories 查看現(xiàn)有的倉庫列表:
3.Nexus倉庫:
這里的倉庫分了四種類型
- hosted(宿主倉庫):用來部署自己,第三方或者公共倉庫的構(gòu)件
- proxy(代理倉庫):代理遠(yuǎn)程倉庫
- virtual(虛擬倉庫):默認(rèn)提供了一個(gè) Central M1虛擬倉庫 用來將maven 2適配為maven 1
- group(倉庫組):統(tǒng)一管理多個(gè)倉庫
<font color=blue size=5>Public Repositories: 倉庫組
3rd party: 無法從公共倉庫獲得的第三方發(fā)布版本的構(gòu)件倉庫
Apache Snapshots: 用了代理ApacheMaven倉庫快照版本的構(gòu)件倉庫
Central: 用來代理maven中央倉庫中發(fā)布版本構(gòu)件的倉庫
Central M1 shadow: 用于提供中央倉庫中M1格式的發(fā)布版本的構(gòu)件鏡像倉庫
Codehaus Snapshots: 用來代理CodehausMaven 倉庫的快照版本構(gòu)件的倉庫
Releases: 用來部署管理內(nèi)部的發(fā)布版本構(gòu)件的宿主類型倉庫
Snapshots:用來部署管理內(nèi)部的快照版本構(gòu)件的宿主類型倉庫
4.建立Nexus宿主倉庫
新建一個(gè)內(nèi)部倉庫中姜,步驟為Repositories –> Add –> Hosted Repository消玄,在頁面的下半部分輸入框中填入Repository ID和Repository Name即可,另外把Deployment Policy設(shè)置為Allow Redeploy丢胚,點(diǎn)擊save就創(chuàng)建完成了翩瓜。這里我點(diǎn)擊添加宿主類型的倉庫,在倉庫列表的下方會(huì)出現(xiàn)新增倉庫的配置携龟,如下所示:
建立好新的倉庫之后需要配置一下相關(guān)賬號(hào)信息.在安全選項(xiàng)下選擇用戶選項(xiàng),可以看到三個(gè)默認(rèn)的賬號(hào),分別是管理員賬號(hào),部署賬號(hào)和Nexus賬號(hào).正常訪問倉庫內(nèi)容的時(shí)候是不需要這三個(gè)賬戶的,一般也就是把部署賬號(hào)暴露出去,方便倉庫項(xiàng)目維護(hù)人員部署項(xiàng)目使用.所以這里可以用默認(rèn)的Deployment賬戶(記得重置下密碼).也可以新建一個(gè)賬號(hào)來使用,新建的時(shí)候可以通過add role management來控制該賬號(hào)的權(quán)限兔跌。
點(diǎn)擊新建的倉庫的url可以直接如今倉庫的路勁,因?yàn)楝F(xiàn)在還沒有部署項(xiàng)目峡蟋,所以是空的倉庫坟桅。
<font color=black size=5>至此,搭建私服的maven倉庫就已經(jīng)完成蕊蝗,下面繼續(xù)介紹Android 端在AS 上面的應(yīng)用仅乓。
三、上傳庫到Maven倉庫
上傳庫到maven倉庫有兩種方式蓬戚,我們先來介紹第一種:
- 首先我們創(chuàng)建一個(gè)新的AndroidStudio 項(xiàng)目夸楣,然后新建一個(gè)module,選擇Android Library。
然后裕偿,我們隨便寫一個(gè)功能供別人使用洞慎。例如我寫一個(gè)ToastUtils:
然后RebuildProject生成依賴的arr包。
2.在MavenRepoDemo項(xiàng)目的根目錄的build.gradle中配置剛剛建立的倉庫:
allprojects {
repositories {
jcenter()
maven{ url 'http://localhost:8081/nexus/content/repositories/releases/'}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
- 在同目錄下配置gradle.properties文件嘿棘,定義通用屬性,方便如果有多個(gè)庫需要部署時(shí)旭绒,不需要修改每一個(gè)庫中的配置:
#Maven倉庫的URL
MAVEN_REPO_RELEASE_URL=http://localhost:8081/nexus/content/repositories/releases/
MAVEN_REPO_SNAPSHOT_URL=http://localhost:8081/nexus/content/repositories/snapshots/
#對(duì)應(yīng)maven的GroupId的值
GROUP = common
#登錄nexus ossde的用戶名
NEXUS_USERNAME=admin
#登錄nexus oss的密碼
NEXUS_PASSWORD=admin123
# groupid
GROUP_ID = common
# type
TYPE = aar
# description
DESCRIPTION = This is Toast lib
這里的倉庫我用的是Nexus 原有的倉庫(你可以換成剛剛新建的倉庫地址)鸟妙。
- 修改module對(duì)應(yīng)的build.gradle文件,添加以下配置:
apply plugin: 'com.android.library'
apply plugin: 'maven'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
minSdkVersion 19
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
lintOptions {
abortOnError false
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
}
uploadArchives {
configuration = configurations.archives
repositories {
mavenDeployer {
snapshotRepository(url: MAVEN_REPO_SNAPSHOT_URL) {
authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
}
repository(url: MAVEN_REPO_RELEASE_URL) {
authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
}
pom.project {
version '1.0.0'
artifactId 'toastutils-lib'
groupId GROUP_ID
packaging TYPE
description DESCRIPTION
}
}
}
}
artifacts {
archives file('toastutils.aar')
}
-
在as右邊欄挥吵,找到Gradle打開如下:
這里寫圖片描述
然后雙擊uploadArchives重父,編譯腳本并上傳arr文件到私有倉庫,最后在控制臺(tái)可以看到日志是否上傳成功忽匈。
可以去倉庫查看到剛剛上傳的庫文件:
第二種房午,就是直接通過Nexus直接上傳,這種就不詳細(xì)說了丹允,有興趣的自己去研究下吧郭厌! 嘿嘿
四、在項(xiàng)目中應(yīng)用
- 在項(xiàng)目的根目錄build.gradle配置如下:
- 在app目錄下的build.gradle配置如下:
這樣我們就完工了雕蔽。在項(xiàng)目中調(diào)用我們庫了折柠,別人按照上面的配置就可以引用庫使用了。
<font color=black size=5>附上Demo的GitHub項(xiàng)目源碼:MavenRepoDemo
對(duì)于頻繁更新的子項(xiàng)目是否適合采用這種方式批狐。因?yàn)槊看巫儎?dòng)都需要上傳扇售,而主項(xiàng)目在引用該AAR的時(shí)候則需要每次都去檢查是否更新, 這會(huì)使得編譯時(shí)間大大增加嚣艇,有了這個(gè)maven庫承冰,就不用那么麻煩了。
想了解更多有關(guān)的資料:
學(xué)習(xí)理解并整理下來的筆記食零。
希望大家能夠指點(diǎn)或提出寶貴意見困乒,謝謝!一起學(xué)習(xí)慌洪。
轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/u011974987/article/details/52372185
個(gè)人站點(diǎn):xuhao.tech