Android 項目部署之Nexus私服搭建和應用

一.概述

       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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章