一.概述
Nexus是一個基於maven的倉庫管理的社區項目.主要的使用場景就是可以在局域網搭建一個maven私服,用來部署第三方公共構件或者作爲遠程倉庫在該局域網的一個代理.簡單舉幾個例子就是:
1.第三方Jar包可以放在nexus上,項目可以直接通過Url和路徑配置直接引用.方便進行統一管理.
2.同時有多個項目在開發的時候,一些共用基礎模塊可以單獨抽取到nexus上,需要用的項目直接從nexus上拉取就行(基礎模塊的實現,維護和部署可以交給專門的人員,其他項目不用關心代碼實現,這樣也可以達到保證核心代碼不泄露).
3.一些封閉開發的過程中開發機是不能上公網的,所以連接central repository和下載jar就比較麻煩,這時就可以用nexus搭建起來一個介於公網和局域網之間的橋樑.
接下來就簡單介紹一下nexus的搭建以及在android項目中使用nexus的方式.
二.搭建
1.下載&配置
這裏使用的是Nexus OSS開源版,官網下載地址:http://www.sonatype.org/nexus/go/ ,博主的開發環境是ubuntu,所以就下載的TGZ壓縮的.
把壓縮包解壓之後進入bin文件夾就可以運行shell腳本來啓動nexus,通過查看bin/nexus腳本發現可以修改腳本來適配自己的需求,例如修改Nexus的root路徑,如果需要以root身份來啓動Nexus就需要設置RUN_AS_USER=root,設置app名字和登陸名字等.也可以去conf/nexus.properties文件修改端口之類的信息.
接下來直接運行Nexus腳本,查看一下該腳本支持幾個參數命令,將Nexus啓動起來(在這之前博主的Nexus已經啓動了所以就用的restart)
2.創建倉庫
從狀態上來看nexus已經啓動起來了,Nexus啓動之後就可以在瀏覽器訪問類似 192.168.9.190:9999/nexus/ 地址,其中ip爲當前服務器ip,端口Nexus默認爲8081,可以在conf/nexus.properties文件中修改端口.進入web管理頁面後右上角登陸,Nexus默認的賬號密碼是admin:admin123,然後點擊左側的repositories查看現有的倉庫列表.
這裏的倉庫分了四種類型
1.hosted(宿主倉庫):用來部署自己,第三方或者公共倉庫的構件
2.proxy(代理倉庫):代理遠程倉庫
3.virtual(虛擬倉庫):默認提供了一個 Central M1虛擬倉庫 用來將maven 2適配爲maven 1
4.group(倉庫組):統一管理多個倉庫
這裏以建立hosted倉庫爲例簡單介紹Nexus在Android開發中的實際使用情況.點擊repositories->add 鍵入ID(部署項目的標識) Name等屬性,這裏需要注意的是,如果該倉庫有多次部署的情況的話,將policy設置爲allow redeploy,不然後續在部署的時候會出現403錯誤.
建立好新的倉庫之後需要配置一下相關賬號信息.在安全選項下選擇用戶選項,可以看到三個默認的賬號,分別是管理員賬號,部署賬號和Nexus賬號.正常訪問倉庫內容的時候是不需要這三個賬戶的,一般也就是把部署賬號暴露出去,方便倉庫項目維護人員部署項目使用.所以這裏可以用默認的Deployment賬戶(記得reset下密碼).也可以新建一個賬號來使用,新建的時候可以通過add role management來控制該賬號的權限.
回到repositories選項就可以看到新建出來的倉庫,點擊倉庫URL可以直接進入到倉庫路徑,當然現在還沒有部署項目.到此爲止搭建Maven私服Nexus端的配置和部署都已經完成,下面開始介紹Nexus Android端的配置部署和應用.
3.Android端私服倉庫應用
這裏就拿之前分析過的Android 4.4原生DeckClock程序舉例.Android 4.4 中的DeckClock項目需要依賴framework下的一個名叫datetimepicker的庫工程.這裏就把這個datetimepicker工程部署到Nexus上,讓DeskClock根據倉庫url和路徑進行訪問和datetimepicker版本控制.
首先在DeskClock項目的build.gradle中配置之前建立的倉庫.
allprojects {
repositories {
jcenter()
mavenLocal()
}
dependencies{
repositories {
maven { url 'http://192.168.9.190:9999/nexus/content/repositories/jesse/' }
}
}
}
接下來需要從項目中把datetimepicker模塊剝離出來,因爲我們要把它單獨部署到剛剛配置的倉庫裏,DeskClock項目直接依賴datetimepicker模塊改爲通過Nexus依賴.剝離之後在datetimepicker模塊中的build.gradle文件中使用uploadArchives方法向指定倉庫上傳有效的aar文件.並且配置pom文件信息.目前配置是默認走repository中的倉庫,如果在版本號後面加上-SNAPSHOT就會走snapshotRepository中的倉庫.artifactId是該模塊的名字,groupId是倉庫包名路徑.uploadArchives {
repositories {
mavenDeployer {
snapshotRepository(url: 'http://192.168.9.190:8081/nexus/content/repositories/jesse-snapshot/') {
authentication(userName: 'Jesse', password: 'jesse')
}
repository(url: 'http://192.168.9.190:8081/nexus/content/repositories/jesse/') {
authentication(userName: 'Jesse', password: 'jesse')
}
pom.project {
version '1.0.2'
artifactId 'datetimepicker'
groupId 'cn.jesse.android'
packaging 'aar'
description 'dependences lib'
}
}
}
}
artifacts {
archives file('datetimepicker.aar')
}
在Android Studio的Gradle project插件中選中datetimepicker模塊運行uploadArchives任務就可以將該模塊的aar文件以1.0.2的版本部署到Nexus上,供其他項目引用.
將datetimepicker部署到Nexus上之後,就可以在主模塊的build.gradle直接通過部署時設置的groupId和version建立與datetimepicker之間的依賴.
dependencies {
compile 'cn.jesse.android:datetimepicker:1.0.2'
}
轉載請註明出處:http://blog.csdn.net/l2show/article/details/48653949