Android業務元件化之Gradle和Sonatype Nexus搭建私有maven倉庫
前言:
公司的業務元件化推進的已經差不多三四個月的時間了,各個業務元件之間的解耦工作已經基本完成,各個業務元件以module的形式存在專案中,然後專案依賴本地的module,多少有點不太利於專案的並行開發維護了,本質原因就是如果是依賴本地的,必須要將依賴的module和主工程放在一個project裡面,這就導致了每個project都需要配置這些依賴關係,如果是公司內多個工程依賴同一個公司內部的業務元件,業務元件有更新時,同步非常麻煩,但公司內部的業務元件不可能部署到公有maven伺服器上,所以有必要搭建一個區域網內的maven伺服器,方便管理公司內部的公共庫及業務元件,通過查閱資料和技術預研確定採用Gradle和Sonatype Nexus搭建私有maven倉庫的方式,今天總結一下如何搭建整套整合環境及簡單的使用。下圖簡單示例一下現在的專案結構:
業務元件化相關部落格:
什麼是Maven?
Maven 是一個專案管理和自動構建工具。Maven 包集中存放的地方,就是 Maven 倉庫。這些倉庫,可以是放在本地,也可以放在某個遠端伺服器上。 可以是私有倉庫,也可以是公開的。在Android上的使用方式如下
allprojects { repositories { mavenCentral(); jcenter() maven { url 'file:///Users/my-user-name/Documents/Android/repo/' } maven { url 'http://localhost:8081/nexus/content/repositories/releases/' } } }
什麼是Gradle?
Gradle是一個基於JVM的構建工具,是一款通用靈活的構建工具,支援maven, Ivy倉庫,支援傳遞性依賴管理,而不需要遠端倉庫或者是pom.xml和ivy.xml配置檔案,基於Groovy,build指令碼使用Groovy編寫。
Android支援的Maven倉庫:
- mavenCentral 是最早的 maven 中央倉庫
- jcenter 是 Android Studio 0.8 版本起的預設 maven 中央倉庫
- 本機的倉庫
- 部署在內網伺服器的私有倉庫
使用Nexus搭建 maven 私服
1.下載Nexus
2.啟動Nexus
我這裡下載的All platforms - Nexus Repository Manager OSS 2.x - bundle.zip
我這裡選擇的是windows-x86-64,大致裡面有這幾個操作項
- console-nexus 啟動nexus並開啟控制檯
- install-nexus 將nexus安裝成系統服務
- start-nexus 開始nexus服務
- stop-nexus 停止nexus服務
- uninstall-nexus 解除安裝nexus系統服務
雙擊console-nexus.bat執行。再瀏覽器中輸入http://127.0.0.1:8081/nexus/,如下圖所示就代表nexus已經啟動成功了。
8081是預設的埠號,要修改埠號,進入\conf\開啟nexus.properties檔案,修改application-port屬性值就可以了。 預設的使用者名稱和密碼分別是:admin和admin123。
3.Nexus倉庫
倉庫型別:
- hosted(宿主倉庫):用來部署自己,第三方或者公共倉庫的構件
- proxy(代理倉庫):代理遠端倉庫
- virtual(虛擬倉庫):預設提供了一個 Central M1虛擬倉庫 用來將maven 2適配為maven 1
- group(倉庫組):統一管理多個倉庫
Public Repositories: 倉庫組
- 3rd party: 無法從公共倉庫獲得的第三方釋出版本的構件倉庫
- Apache Snapshots: 用了代理ApacheMaven倉庫快照版本的構件倉庫
- Central: 用來代理maven中央倉庫中釋出版本構件的倉庫
- Central M1 shadow: 用於提供中央倉庫中M1格式的釋出版本的構件映象倉庫
- Codehaus Snapshots: 用來代理CodehausMaven 倉庫的快照版本構件的倉庫
- Releases: 用來部署管理內部的釋出版本構件的宿主型別倉庫
- Snapshots:用來部署管理內部的快照版本構件的宿主型別倉庫
4.建立宿主倉庫
新建公司的內部倉庫,步驟為Repositories –> Add –> Hosted Repository,在頁面的下半部分輸入框中填入Repository ID和Repository Name即可,比如分別填入zfy 和 zfy repostiory,另外把Deployment Policy設定為Allow Redeploy,點選save就建立完成了。這裡我點選新增宿主型別的倉庫,在倉庫列表的下方會出現新增倉庫的配置,如下所示:
點選save按鈕後就會在倉庫列表中看到剛才新增的倉庫。
Android 依賴包 AAR
1.什麼是AAR
AAR檔案是Google為Android開發所設計的一種library格式,全名為Android Archive Library, 與Java Jar Library不同的地方是AAR除了java code之外也包含res,也就是一些圖片、文字等 資原始檔。會設計形式的類別庫是因為Google在Android SDK tool r14之後開始支援Library Project的開發方式,這種Library Project可以說是Android APP的半成品,其目標並不是製作成APK來執行,而是提供現成的View/Activiy等一些資源給其他開發者使用。而 AAR正是這種Library Project編譯後的壓縮包,壓縮後只需傳遞單一檔案即可分享,可以說是相當方便。
2.Android專案打包成AAR
將一個Android專案打包成AAR你需要在專案的gradle指令碼build.gradle檔案中新增 apply plugin: ‘android-library’,然後編譯專案,在下圖示意的目錄下可以找到打包好的arr檔案
3.Android專案使用AAR
引用遠端的aar
compile 'com.squareup.okhttp3:okhttp:3.6.0'
引用本地aar檔案
compile fileTree(dir: 'libs', include: '*.aar')
上傳庫到Maven倉庫
1.首先我們建立一個新的AndroidStudio 專案,然後新建一個module,選擇Android Library,類似下面這種結構
Rebuild Project生成依賴的arr包
2.專案的根目錄的build.gradle中配置倉庫地址
allprojects {
repositories {
jcenter()
maven{
url 'http://localhost:8081/nexus/content/repositories/releases/'
}
}
}
3.配置gradle.properties檔案,定義通用屬性
#Maven倉庫的URL
MAVEN_REPO_RELEASE_URL=http://localhost:8081/nexus/content/repositories/releases/
MAVEN_REPO_SNAPSHOT_URL=http://localhost:8081/nexus/content/repositories/snapshots/
#對應maven的GroupId的值
GROUP = com.xxx
#登入nexus ossde的使用者名稱
NEXUS_USERNAME=admin
#登入nexus oss的密碼
NEXUS_PASSWORD=admin123
# groupid
GROUP_ID = com.xxx
# type
TYPE = aar
# description
DESCRIPTION = app.lib
4.修改module對應的build.gradle檔案,新增以下配置
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 'app.lib'
groupId GROUP_ID
packaging TYPE
description DESCRIPTION
}
}
}
}
artifacts {
archives file('app.lib.aar')
}
5.點選uploadArchives進行編譯上傳
在as右邊欄,找到Gradle開啟如下
然後雙擊uploadArchives,編譯指令碼並上傳arr檔案到私有倉庫,最後在控制檯可以看到日誌是否上傳成功。
去倉庫檢視到剛剛上傳的庫檔案
在專案中應用
1.新建一個專案在專案的專案的根目錄build.gradle配置如下
maven{
url 'http://localhost:8081/nexus/content/repositories/releases/'
}
2.在app目錄下的build.gradle配置如下
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.2.0'
testCompile 'junit:junit:4.12'
compile 'whoislcj:app.lib:1.0.0'
}
這樣配置就算結束了,就可以正常的使用了。
總結:
本文學習總結了如何搭建一個私有的maven程式碼倉庫,本文大部分資源來源於這篇部落格使用Gradle和Sonatype Nexus 搭建私有maven倉庫,重新整理一下有助於我記錄整個業務元件化的過程與心得,所以一邊看一邊搭建一邊嘗試。
相關推薦
Android業務元件化之Gradle和Sonatype Nexus搭建私有maven倉庫
前言: 公司的業務元件化推進的已經差不多三四個月的時間了,各個業務元件之間的解耦工作已經基本完成,各個業務元件以module的形式存在專案中,然後專案依賴本地的module,多少有點不太利於專案的並行開發維護了,本質原因就是如果是依賴本地的,必須要將依賴的module和主工程放在一個project裡
Android業務組件化之Gradle和Sonatype Nexus搭建私有maven倉庫
Android 前言: 公司的業務組件化推進的已經差不多三四個月的時間了,各個業務組件之間的解耦工作已經基本完成,各個業務組件以module的形式存在項目中,然後項目依賴本地的module,多少有點不太利於項目的並行開發維護了,本質原因就是如果是依賴本地的,必須要將依賴
使用Gradle和Sonatype Nexus 搭建私有maven倉庫
前言: 隨著業務的增長,需求量增多,我們的App 元件也越來越多,幾乎大部分元件都有用到同樣的第三方庫和公司內部封裝的庫,而團隊中的所有人都重複的從maven 遠端的中央倉庫下載構建,這樣就會加大了倉庫的負載和浪費了外網的頻寬,網速慢的話,就要等很久很
Android業務元件化之現狀分析與探討
前言: 從個人經歷來說的話,從事APP開發這麼多年來,所接觸的APP的體積變得越來越大,業務的也變得越來越複雜,總來來說只有一句話:這是一個APP臃腫的時代!所以為了告別APP臃腫的時代,讓我們進入一個U盤時代,每個業務模組都是一個具備獨立執行的U盤,插在哪
Android業務元件化之子模組SubModule的拆分以及它們之間的路由Router實現
前言: 前面分析了APP的現狀以及業務元件化的一些探討(Android業務元件化之現狀分析與探討),以及通訊的橋樑Scheme的使用(Android業務元件化之URL Scheme使用),今天重點來聊下子模組SubModule的拆分以及它們之間的路由Router實現。本篇涉及的相關知識比較多,閱讀
Android業務元件化之URL Scheme使用
前言: 最近公司業務發展迅速,單一的專案工程不再適合公司發展需要,所以開始推進公司APP業務元件化,很榮幸自己能夠牽頭做這件事,經過研究實現元件化的通訊方案通過URL Scheme,所以想著現在還是在預研階段,很有必要先了解一下URL Scheme,看看是如何使用的?其實在之前做Hybrid混合程
Android-使用Nexus搭建私有Maven倉庫
一、先看一些概念 1、Maven倉庫分類 從Maven的依賴下載管理角度來看, Maven倉庫分為遠端倉庫和本地倉庫,遠端倉庫的使用需要新增倉庫地址才能正常連線下載依賴。Maven的遠端倉庫分為中央倉庫和私服倉庫,中央倉庫存放了世界各地上傳的依賴包,比較出名的是Jcent
Android 專案元件化之建立module,生成aar,引入aar
導言: 在android平時的開發中,經常自己寫的東西讓別人使用,那麼就有module,aar,jar等方式. 1:module通過import module並dependencies完成 2:aar,包括所有檔案的android專用包,通過右邊的gradle->assembl
Android 業務元件化開發實踐
本文原創,轉載請以連結形式註明地址:http://kymjs.com/code/2016/10/18/01元件化並不是新話題,其實很早很早以前我們開始為專案解耦的時候就討論過的。但那時候我們說的是功能元件化。比如很多公司都常見的,網路請求模組、登入註冊模組單獨拿出來,交給一個團隊開發,而在用的時候只需要接入對
Android業務元件化開發實踐
1. 寫在前面 原文地址:http://kymjs.com/code/2016/10/18/01 借用阿布倪盟博的一句話:“在MDCC中馮森林老師的《迴歸初心,從容器化到元件化》,為我們這些沒有那麼多精力折騰黑科技開發者們打開了另一扇門” 。 元件
Android業務元件化開發實踐(轉載)
借用阿布倪盟博的一句話:“在MDCC中馮森林老師的《迴歸初心,從容器化到元件化》,為我們這些沒有那麼多精力折騰黑科技開發者們打開了另一扇門” 。 元件化並不是新話題,其實很早很早以前我們開始為專案解耦的時候就討論過的。但那時候我們說的是功能元件化。比如很多公司都常
Android業務元件化開發實踐(二)
前言: 從個人經歷來說的話,從事APP開發這麼多年來,所接觸的APP的體積變得越來越大,業務的也變得越來越複雜,總來來說只有一句話:這是一個APP臃腫的時代!所以為了告別APP臃腫的時代,讓我們進入一個U盤時代,每個業務模組都是一個具備獨立執行的U盤,插在哪裡都可以完美執行,這就是推進業務元件
Android 中打包成aar並上傳到Nexus搭建的maven倉庫
目的 方便元件化流通,搭建私有庫有助於多人協作開發專案,提高整合的穩定性和庫引用版本的可控性,也減少繁瑣的第三方庫的釋出工作。 環境搭建 下載 安裝Nexus–>配置環境,啟動伺服器(請自行百度,本文略) 修改localhost為電腦的ip (
Android專案架構之業務元件化
前言: 從個人經歷來說的話,從事APP開發這麼多年來,所接觸的APP的體積變得越來越大,業務的也變得越來越複雜,總來來說只有一句話:這是一個APP臃腫的時代!所以為了告別APP臃腫的時代,讓我們進入一個U盤時代,每個業務模組都是一個具備獨立執行的盤,插在哪裡都
Android元件化之元件通訊
Demo地址:https://github.com/751496032/ComponentDemo 本文是續上一篇Android元件化方案實踐與思考文章一些思考,主要是針對元件間通訊,比如: 每個元件如何初始化各自的資料 Activity間如何跳轉、Fragment例項
我所理解的Android元件化之通訊機制
之前寫過一篇關於Android元件化的文章,《Android元件化框架設計與實踐》,之前沒看過的小夥伴可以先點選閱讀。那篇文章是從實戰中進行總結得來,是公司的一個真實專案進行元件化架構改造,粒度會分的更粗些,是對整體架構實踐進行相應的總結,裡面說了要打造一個元件化框架的話,需要從以下7個方面入手: 程式碼解
Android Studio之Gradle和Gradle外掛的區別
什麼是Gradle?什麼是Gradle外掛?Gradle 對應:gradle-wrapper.properties中的distributionUrl=https/://services.gradle.org/distribut
Android 元件化開發原理和配置
在Application的不斷髮展過程中,我們開發者要不斷地增加新特性。更多的程式碼就意味著更長的build時間和更長的增量build時間。在工程較大的專案中,build時間要佔到10%~15%的工作時間。這不僅是浪費時間,也是測試驅動工作方式(TDD)比較困難的原因。
Android 元件化之路 路由設計
基於公司業務發展,公司的APP需求不斷增加,應用也略顯“臃腫”。想著趁現在不那麼“糟糕”,時間也比較寬裕,把專案結構整整,因而走上了元件化之路。 模組化 VS 元件化 模組化: 將一個程式按照其功能做拆分,分成相互獨立的模組,以便於每個模組只包含與其功能
Android元件化之終極方案
Fragment或View如何支援元件化 距離 Android元件化方案 釋出已經半年有餘,雖說這個方案已經能夠解決一些專案的需求,但是依然不夠完美。很多開發者也在部落格和GitHub中留言甚至發郵件問我,Fragment怎麼辦?