公司的業務組件化推動的已經差很少三四個月的時間了,各個業務組件之間的解耦工做已經基本完成,各個業務組件以module的形式存在項目中,而後項目依賴本地的module,多少有點不太利於項目的並行開發維護了,本質緣由就是若是是依賴本地的,必需要將依賴的module和主工程放在一個project裏面,這就致使了每一個project都須要配置這些依賴關係,若是是公司內多個工程依賴同一個公司內部的業務組件,業務組件有更新時,同步很是麻煩,但公司內部的業務組件不可能部署到公有maven服務器上,因此有必要搭建一個局域網內的maven服務器,方便管理公司內部的公共庫及業務組件,經過查閱資料和技術預研肯定採用Gradle和Sonatype Nexus搭建私有maven倉庫的方式,今天總結一下如何搭建整套集成環境及簡單的使用。下圖簡單示例一下如今的項目結構:html
業務組件化相關博客:java
Maven 是一個項目管理和自動構建工具。Maven 包集中存放的地方,就是 Maven 倉庫。這些倉庫,能夠是放在本地,也能夠放在某個遠程服務器上。 能夠是私有倉庫,也能夠是公開的。在Android上的使用方式以下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是一個基於JVM的構建工具,是一款通用靈活的構建工具,支持maven, Ivy倉庫,支持傳遞性依賴管理,而不須要遠程倉庫或者是pom.xml和ivy.xml配置文件,基於Groovy,build腳本使用Groovy編寫。windows
Android支持的Maven倉庫:瀏覽器
下載地址:http://www.sonatype.org/nexus/go服務器
我這裏下載的All platforms - Nexus Repository Manager OSS 2.x - bundle.zip,下載完成以後,解壓後進入\nexus-2.1.2-bundle\nexus-2.1.2\bin\jsw\,根據不一樣的系統選擇不一樣的文件夾進入,文件夾目錄結構以下:app
我這裏選擇的是windows-x86-64,大體裏面有這幾個操做項maven
雙擊console-nexus.bat運行。再瀏覽器中輸入http://127.0.0.1:8081/nexus/,以下圖所示就表明nexus已經啓動成功了。工具
8081是默認的端口號,要修改端口號,進入\conf\打開nexus.properties文件,修改application-port屬性值就能夠了。 默認的用戶名和密碼分別是:admin和admin123。 組件化
倉庫類型:
Public Repositories: 倉庫組
新建公司的內部倉庫,步驟爲Repositories –> Add –> Hosted Repository,在頁面的下半部分輸入框中填入Repository ID和Repository Name便可,好比分別填入zfy 和 zfy repostiory,另外把Deployment Policy設置爲Allow Redeploy,點擊save就建立完成了。這裏我點擊添加宿主類型的倉庫,在倉庫列表的下方會出現新增倉庫的配置,以下所示:
點擊save按鈕後就會在倉庫列表中看到剛纔新增的倉庫。
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編譯後的壓縮包,壓縮後只需傳遞單一文件便可分享,能夠說是至關方便。
將一個Android項目打包成AAR你須要在項目的gradle腳本build.gradle文件中添加 apply plugin: ‘android-library’,而後編譯項目,在下圖示意的目錄下能夠找到打包好的arr文件
引用遠端的aar
compile 'com.squareup.okhttp3:okhttp:3.6.0'
引用本地aar文件
compile fileTree(dir: 'libs', include: '*.aar')
Rebuild Project生成依賴的arr包
allprojects {
repositories {
jcenter()
maven{
url 'http://localhost:8081/nexus/content/repositories/releases/'
}
}
}
#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
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')
}
在as右邊欄,找到Gradle打開以下
而後雙擊uploadArchives,編譯腳本並上傳arr文件到私有倉庫,最後在控制檯能夠看到日誌是否上傳成功。
去倉庫查看到剛剛上傳的庫文件
maven{
url 'http://localhost:8081/nexus/content/repositories/releases/'
}
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倉庫,從新整理一下有助於我記錄整個業務組件化的過程與心得,因此一邊看一邊搭建一邊嘗試。