使用Gradle和Sonatype Nexus 搭建私有maven倉庫
前言:
隨著業務的增長,需求量增多,我們的App 元件也越來越多,幾乎大部分元件都有用到同樣的第三方庫和公司內部封裝的庫,而團隊中的所有人都重複的從maven 遠端的中央倉庫下載構建,這樣就會加大了倉庫的負載和浪費了外網的頻寬,網速慢的話,就要等很久很久,半個小時,幾個小時,都有可能!這樣明顯影響專案的開發進度,有的公司還是在內網的情況下開發,連線不到中央倉庫怎麼辦?公司內部開發的公共元件怎麼讓其他專案共用呢?這個時候,我們不得不為自己的團隊搭建一個私服maven倉庫,來提高我們的開發效率。
起初,對gradle和maven不是很熟,看了網上的教程一臉懵逼,後來,花了點時間,發現整個過程也還是很簡單的。↓↓
首先我們來了解一下,
一、什麼是Maven,Gradle?
Maven 是一個專案管理和自動構建工具。Maven 包集中存放的地方,就是 Maven 倉庫。這些倉庫,可以是放在本地,也可以放在某個遠端伺服器上。 可以是私有倉庫,也可以是公開的。下開發用的庫列表:
mavenCentral();
jcenter()
maven {
url 'file:///Users/my-user-name/Documents/Android/repo/'
}
maven {
url 'http://localhost:8081/nexus/content/repositories/releases/'
}
Android Studio Gradle 主要支援兩個 Maven 中央庫:mavenCentral 和 jcenter。
- mavenCentral 是最早的 maven 中央倉庫
- jcenter 是 Android Studio 0.8 版本起的預設 maven 中央倉庫
- 第三個是我的本機的倉庫
- 第四個是筆者部署在內網伺服器的私有倉庫
Gradle 是一個基於Apache Ant和Apache Maven概念的專案自動化建構工具。它使用一種基於Groovy的特定領域語言來宣告專案設定,而不是傳統的XML
二、使用Nexus搭建maven私服
1.Nexus 下載安裝:
官網下載地址:http://www.sonatype.org/nexus/go/,我的開發環境是Windows,我下載的是Nexus Repository Manager OSS 2.xx下面的 All platforms nexus-2.13.0-01-bundle.zip壓縮檔案。↓
2.Nexus 啟動:
下載完成之後,解壓後進入\nexus-2.1.2-bundle\nexus-2.1.2\bin\jsw\,根據作業系統型別選擇資料夾,我選的是windows-x86-32資料夾,進入後可看到如下所示bat檔案。
雙擊console-nexus.bat執行。再瀏覽器中輸入http://127.0.0.1:8081/nexus/,出現圖(2)所示就代表nexus已經啟動成功了。
圖(2)
8081是預設的埠號,要修改埠號,進入\conf\開啟nexus.properties檔案,修改application-port屬性值就可以了。
預設的使用者名稱和密碼分別是:admin和admin123。點選右上角的log in 登入後如圖所示:
點選左側的 repositories 檢視現有的倉庫列表:
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.建立Nexus宿主倉庫
新建一個內部倉庫,步驟為Repositories –> Add –> Hosted Repository,在頁面的下半部分輸入框中填入Repository ID和Repository Name即可,另外把Deployment Policy設定為Allow Redeploy,點選save就建立完成了。這裡我點選新增宿主型別的倉庫,在倉庫列表的下方會出現新增倉庫的配置,如下所示:
建立好新的倉庫之後需要配置一下相關賬號資訊.在安全選項下選擇使用者選項,可以看到三個預設的賬號,分別是管理員賬號,部署賬號和Nexus賬號.正常訪問倉庫內容的時候是不需要這三個賬戶的,一般也就是把部署賬號暴露出去,方便倉庫專案維護人員部署專案使用.所以這裡可以用預設的Deployment賬戶(記得重置下密碼).也可以新建一個賬號來使用,新建的時候可以通過add role management來控制該賬號的許可權。
點選新建的倉庫的url可以直接如今倉庫的路勁,因為現在還沒有部署專案,所以是空的倉庫。
至此,搭建私服的maven倉庫就已經完成,下面繼續介紹Android 端在AS 上面的應用。
三、上傳庫到Maven倉庫
上傳庫到maven倉庫有兩種方式,我們先來介紹第一種:
1. 首先我們建立一個新的AndroidStudio 專案,然後新建一個module,選擇Android Library。
然後,我們隨便寫一個功能供別人使用。例如我寫一個ToastUtils:
然後RebuildProject生成依賴的arr包。
2.在MavenRepoDemo專案的根目錄的build.gradle中配置剛剛建立的倉庫:
allprojects {
repositories {
jcenter()
maven{ url 'http://localhost:8081/nexus/content/repositories/releases/'}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
- 在同目錄下配置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 = 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對應的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檔案到私有倉庫,最後在控制檯可以看到日誌是否上傳成功。
可以去倉庫檢視到剛剛上傳的庫檔案:
第二種,就是直接通過Nexus直接上傳,這種就不詳細說了,有興趣的自己去研究下吧! 嘿嘿
四、在專案中應用
- 在專案的根目錄build.gradle配置如下:
- 在app目錄下的build.gradle配置如下:
這樣我們就完工了。在專案中呼叫我們庫了,別人按照上面的配置就可以引用庫使用了。
對於頻繁更新的子專案是否適合採用這種方式。因為每次變動都需要上傳,而主專案在引用該AAR的時候則需要每次都去檢查是否更新, 這會使得編譯時間大大增加,有了這個maven庫,就不用那麼麻煩了。
想了解更多有關的資料:
相關推薦
Android業務組件化之Gradle和Sonatype Nexus搭建私有maven倉庫
Android 前言: 公司的業務組件化推進的已經差不多三四個月的時間了,各個業務組件之間的解耦工作已經基本完成,各個業務組件以module的形式存在項目中,然後項目依賴本地的module,多少有點不太利於項目的並行開發維護了,本質原因就是如果是依賴本地的,必須要將依賴
Android業務元件化之Gradle和Sonatype Nexus搭建私有maven倉庫
前言: 公司的業務元件化推進的已經差不多三四個月的時間了,各個業務元件之間的解耦工作已經基本完成,各個業務元件以module的形式存在專案中,然後專案依賴本地的module,多少有點不太利於專案的並行開發維護了,本質原因就是如果是依賴本地的,必須要將依賴的module和主工程放在一個project裡
使用Gradle和Sonatype Nexus 搭建私有maven倉庫
前言: 隨著業務的增長,需求量增多,我們的App 元件也越來越多,幾乎大部分元件都有用到同樣的第三方庫和公司內部封裝的庫,而團隊中的所有人都重複的從maven 遠端的中央倉庫下載構建,這樣就會加大了倉庫的負載和浪費了外網的頻寬,網速慢的話,就要等很久很
Android-使用Nexus搭建私有Maven倉庫
一、先看一些概念 1、Maven倉庫分類 從Maven的依賴下載管理角度來看, Maven倉庫分為遠端倉庫和本地倉庫,遠端倉庫的使用需要新增倉庫地址才能正常連線下載依賴。Maven的遠端倉庫分為中央倉庫和私服倉庫,中央倉庫存放了世界各地上傳的依賴包,比較出名的是Jcent
Nexus搭建私有maven倉庫
準備工作 jdk或者jre環境 nexus-2.14.5-02-bundle安裝包zip 下載地址 下載地址:http://www.sonatype.org/nexus/go (最下面的下載這裡為例) 搭建私
centos使用nexus搭建私有maven倉庫
本文只做個人筆記備忘,描述不夠詳細,見諒 1.配置java環境 ,配置maven環境 詳見http://blog.csdn.net/programmeryu/article/details/77881437 2.下載解壓nexus wget https://sonat
使用Artifactory搭建私有Maven倉庫
在涉及到模組化開發過程中,我們想要將公開或公用元件 aar/jar 上傳至Maven Center or JCenter 倉庫中心(將Android專案開源到JCenter兩種方式),以便於持續整合。但是對於有些元件我們不想對外公開這時候就需要我們搭建一個本
Android 中打包成aar並上傳到Nexus搭建的maven倉庫
目的 方便元件化流通,搭建私有庫有助於多人協作開發專案,提高整合的穩定性和庫引用版本的可控性,也減少繁瑣的第三方庫的釋出工作。 環境搭建 下載 安裝Nexus–>配置環境,啟動伺服器(請自行百度,本文略) 修改localhost為電腦的ip (
使用 Sonatype Nexus 3 搭建 Maven 私服、本地私有 Maven 倉庫,Gradle 打包 jar 、arr 後自動上傳到 Nexus Maven 倉庫配置
1 下載 Nexus 3 官網截圖 注:Nexus 3 版本的執行需要 jdk1.8 解壓 得到 2 個資料夾 // Nexus 執行時所需要的檔案,如啟動指令碼 nexus-3.9.0-01 // Nexus生成的配置檔案,
Maven和 Sonatype Nexus私服的安裝、配置及使用入門
http://blog.csdn.net/congcong68/article/details/40273833Maven 在我們專案中能幫我們解決哪些問題: 1.輸入命令就會幫我們自動 編譯、執行單元測試、生成文件、打包和部署等,列如輸入mvn clean inst
Sonatype Nexus 搭建Maven 私服
1、 為什麼使用Nexus 如果沒有私服,我們所需的所有構件都需要通過maven的中央倉庫和第三方的Maven倉庫下載到本地,而一個團隊中的所有人都重複的從maven倉庫下載構件無疑加大了倉庫的負載和浪費了外網頻寬,如果網速慢的話,還會影響專案的程序。很多情
使用 Nexus Repository Manager 搭建私有docker倉庫
地址 reat 倉庫 dmi log sys systemctl 圖例 temp docker pull sonatype/nexus3 2.使用鏡像啟動一個容器: docker run -d --name nexus --restart=always -p 5000:5
離線更新nexus搭建的Maven私服中央倉庫索引
nexus可以線上更新中央倉庫索引,但是更新速度慢,而且很有可能下載的索引不全。下面介紹一種離線更新中央倉庫索引的方式,速度快並且可靠。 1、訪問http://repo.maven.apache.org/maven2/.index/下載中心倉庫最新版
[轉] 使用HTTPS在Nexus Repository Manager 3.0上搭建私有Docker倉庫
dha cau target article data- 重新啟動 crt main specified FROM: https://www.hifreud.com/2018/06/06/03-nexus-docker-repository-with-ssl/
搭建公司私有MAVEN倉庫過程
一、下載maven
將Gradle項目公布到maven倉庫
檢查 一個 comment content 註意 靈活性 gen android-m 詳細 將Gradle項目公布到maven倉庫 1 Gradle簡單介紹 1.1 Ant、Maven還是Gradle? 1.1.1 Ant和Maven介
利用github搭建個人maven倉庫
pid html tac 最終 .html 安全 class tar mas 之前看到有開源項目用了github來做maven倉庫,尋思自己也做一個。研究了下,記錄下。 簡單來說,共有三步: deploy到本地目錄 把本地目錄提交到gtihub上 配置github地址為
利用github搭建私人maven倉庫
BE putty ima var style 地址 clas 下一步 多行 一、背景 最近在做HBase的項目,不免會引用到一些工具類,如StringUtils,NumberUtils,DateUtils這些,公司底層有封裝好可以直接使用。 但是項目完成,用maven打包
在Kubernetes集群的etcd上搭建私有docker倉庫
etcd上搭建私有docker倉庫[root@etcd ~]# yum groupinstall -y "Development Tools"[root@etcd ~]# yum -y install epel-release[root@etcd ~]# yum -y install py
搭建私有Nuget倉庫
詳細 data nuget realm class 請求 tab 應用 可能 使用Nexus搭建私有Nuget倉庫 https://www.cnblogs.com/Erik_Xu/p/9211471.html 前言 Nuget是ASP .NET Gallery的一員,是