使用Nexus Repository搭建屬于自己公司的私有maven服務器

jopen 8年前發布 | 108K 次閱讀 Maven 安卓開發 項目構建

前言

在Android應用開發過程中,不同IDE對工程的依賴方式不一樣:

使用Eclipse開發時,項目之間的依賴關系是這樣的:一個主工程(project)可以依賴多個libproject、so、jar包,對jar包和so的依賴是直接將jar和so放在工程的libs文件夾下(老版本的ADT需要手動配置Build Path),對libproject的依賴呈現在工程的“project.properties”文件中。

使用Android Studio開發時,除了可以依賴module(對應Eclipse中的libproject)、jar和so,還可以依賴aar(aar和jar包不同之處在于可以將so和資源文件一起打包),as的依賴關系全部(jar、so、aar、libproject)在build.gradle文件中的android標簽中管理。

使用AS開發應用時,除了可以依賴本地的庫之外,還可以依賴網上(公有maven服務器、私有maven服務器、jcenter等),如果是依賴本地的,必須要將依賴的module和主工程放在一個project里面,這就導致了每個project都需要配置這些依賴關系,如果是公司內多個工程依賴同一個公司內部的控件,控件有更新時,同步非常麻煩,但公司內部的控件不可能部署到公有maven服務器上,所以有必要搭建一個局域網內的maven服務器,方便管理公司內部的公共庫。

maven私有服務器搭建

搭建maven私服使用得比較多的是Nexus,Nexus是基于maven倉庫管理的社區項目,主要的使用場景就是可以在局域網搭建一個maven私服,用來部署第三方公共構件或者作為遠程倉庫在該局域網的一個代理。

關于Nexus的介紹和配置很簡單,具體可以查看這里: Android 項目部署之Nexus私服搭建和應用

上傳庫到私服

上傳庫到私服有兩種方式,一種是庫中配置,配置完成后執行upload這個task,另外一種方式是直接上傳。下面分別對這兩種方式做介紹:

在庫中配置,步驟如下:

1. 在project下的gradle.properties文件中定義通用屬性,方便如果有多個庫需要部署時,不需要修改每一個庫中的配置:

    #本地庫
    URLMAVEN_URL= http://172.28.1.*:8081/nexus/content/repositories/thirdparty/
    MAVEN_SNAPSHOT_URL = http://172.28.1.*:8081/nexus/content/repositories/thirdparty-snapshot/
    #對應maven的groupId值
    GROUP=common
    #登錄nexus oss的用戶名
    NEXUS_USERNAME=admin
    #登錄nexus oss的密碼
    NEXUS_PASSWORD=admin123
    # groupid
    GROUP_ID = common
    # type
    TYPE = aar
    # description
    DESCRIPTION = dependences lib

2. 修改module對應的build.gradle文件,配置以誰的名義上傳這個庫,上傳到什么地方,這個庫叫什么名字,屬于哪個group,ID和version、description、packageing等信息

      apply plugin: 'com.android.library'
      apply plugin: 'maven'

      android {
                compileSdkVersion 17 
                buildToolsVersion "23.0.2"
                defaultConfig {
                          minSdkVersion 15
                          targetSdkVersion 17
                          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']) 
      }

      uploadArchives {    
                configuration = configurations.archives    
                repositories {        
                          mavenDeployer {            
                                    snapshotRepository(url: MAVEN_SNAPSHOT_URL) {                
                                              authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)            
                                    }            
                                    repository(url: MAVEN_URL) {                
                                              authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)            
                                    }            
                                    pom.project {                
                                              version '1.0.0'                
                                              artifactId 'TestLibrary'                
                                              groupId GROUP_ID                
                                              packaging TYPE                
                                              description DESCRIPTION            
                                    }        
                          }    
                }
      }

      artifacts {    
      archives file('TestLibrary.aar') }

3. 打開Gradle projects(在AS的右邊欄),找到對應的module,展開,找到Tasks下面的upload標簽并雙擊,在Gradle Console標簽可以查看是否上傳成功。

直接上傳:直接上傳很簡單,直接按照下圖的箭頭操作即可,如果上傳aar還沒有研究過,有興趣的可以自己研究一下:

在項目中使用私有倉庫

在項目中使用私有倉庫的步驟如下:

1. 在project的build.gradle文件中指定私有倉庫的地址,like this:

2. 在需要依賴私有倉庫的build.gradle文件中設置依賴關系:

來自: http://zmywly8866.github.io/2016/01/05/android-private-maven-repository.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!