1. 程式人生 > >使用Gradle和Sonatype Nexus 搭建私有maven倉庫

使用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倉庫:

這裡的倉庫分了四種類型

  1. hosted(宿主倉庫):用來部署自己,第三方或者公共倉庫的構件
  2. proxy(代理倉庫):代理遠端倉庫
  3. virtual(虛擬倉庫):預設提供了一個 Central M1虛擬倉庫 用來將maven 2適配為maven 1
  4. 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
}
  1. 在同目錄下配置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 原有的倉庫(你可以換成剛剛新建的倉庫地址)。

  1. 修改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')
}


  1. 在as右邊欄,找到Gradle開啟如下:
    這裡寫圖片描述

然後雙擊uploadArchives,編譯指令碼並上傳arr檔案到私有倉庫,最後在控制檯可以看到日誌是否上傳成功。

可以去倉庫檢視到剛剛上傳的庫檔案:

這裡寫圖片描述

第二種,就是直接通過Nexus直接上傳,這種就不詳細說了,有興趣的自己去研究下吧! 嘿嘿

四、在專案中應用

  1. 在專案的根目錄build.gradle配置如下:

這裡寫圖片描述

  1. 在app目錄下的build.gradle配置如下:

這裡寫圖片描述

這樣我們就完工了。在專案中呼叫我們庫了,別人按照上面的配置就可以引用庫使用了。

對於頻繁更新的子專案是否適合採用這種方式。因為每次變動都需要上傳,而主專案在引用該AAR的時候則需要每次都去檢查是否更新, 這會使得編譯時間大大增加,有了這個maven庫,就不用那麼麻煩了。

想了解更多有關的資料:

相關推薦

Android業務組件化之GradleSonatype Nexus搭建私有maven倉庫

Android 前言: 公司的業務組件化推進的已經差不多三四個月的時間了,各個業務組件之間的解耦工作已經基本完成,各個業務組件以module的形式存在項目中,然後項目依賴本地的module,多少有點不太利於項目的並行開發維護了,本質原因就是如果是依賴本地的,必須要將依賴

Android業務元件化之GradleSonatype Nexus搭建私有maven倉庫

前言:      公司的業務元件化推進的已經差不多三四個月的時間了,各個業務元件之間的解耦工作已經基本完成,各個業務元件以module的形式存在專案中,然後專案依賴本地的module,多少有點不太利於專案的並行開發維護了,本質原因就是如果是依賴本地的,必須要將依賴的module和主工程放在一個project裡

使用GradleSonatype 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的一員,是