maven内部服务器(三) 共享android库

本文介绍通过maven内部服务器共享android库,即共享aar包的方法。

目录
1. android本地仓库说明
2. 创建本地仓库
3. 共享android公共库
4. 引用android公共库

1. android本地仓库说明

本文将介绍如何将(通过gradle构建的)android公共库通过nexus共享到服务器上,然后其他客户端就可以轻松的引用到该android公共库。

涉及到的内容可以分为三个部分: 第一部分:创建本地仓库。即,在nexus创建仓库。
第二部分:共享android公共库。即,将android公共库共享到nexus本地仓库中。
第三部分:引用android公共库。即,使用"共享到nexus本地仓库中的android公共库"。

2. 创建本地仓库

下面介绍在nexus中创建本地仓库的方法。

第1步 新建Hosted Repository

在Repositories中点击"Add",选择"Hosted Repository"。 如下图所示

img

第2步 编辑"新建的Hosted Repository"

选择新建的"Hosted Repository",此时它的名称是"New Hosted Repository"。选择它,然后点击"Configuration"。在Configuration中,只需要进行以下几项设置;

(1) Repository ID: 这是可以随意定义,只要不和已有的仓库ID重复即可。为了增加可读性,建议根据共享的android库的名字来命名。
(2) Repository Name: 这个也是可以随意定义的。建议根据共享库的名字来命名。
(3) Povoder: 选择"Maven2"即可。
(4) Repository Policy: 选择"release"即可。
(5) Deployment Policy: 选择"Allow Redeploy(允许部署)"。

除了上面的几项之外,其他的不需要设置;然后,点击"Save"。

img

第3步 查看"新建的Hosted Repository"

点击"Save"之后,新建的"Hosted Repository"的名称就变成上面设置的"Repository ID的值"。点击该仓库,此时该仓库有"Repository Path"和"Default Local Storage Location"等值。

img

3. 共享android公共库

下面介绍如何"将android公共库共享到nexus本地仓库中"。

前面已经创建好了WheelView本地仓库,下面介绍如何将WheelView公共库到本地仓库。本地使用的WheelView公共库已共享到github上,点击查看android共享库的源码,这份源码也是本文的示例源码。


下面介绍"对于用户已有的android库"如何修改,从而使它能被共享到nexus本地仓库。这里仅仅介绍通过gradle自动构建的android库,对于通过ant或者maven构建的工程,这里不予介绍。

第1步 编辑android库的build.gradle

编译android公共库的build.gradle,添加以下内容:

apply plugin: 'maven' 

def isReleaseBuild() {
    return VERSION_NAME.contains("SNAPSHOT") == false
}
def getRepositoryUsername() {
    return hasProperty('NEXUS_USERNAME') ? NEXUS_USERNAME : ""
}
def getRepositoryPassword() {
    return hasProperty('NEXUS_PASSWORD') ? NEXUS_PASSWORD : ""
}
afterEvaluate { project ->
    uploadArchives {
        repositories {
            mavenDeployer {
                pom.groupId = GROUP
                pom.artifactId = POM_ARTIFACT_ID
                pom.version = VERSION_NAME
                repository(url: RELEASE_REPOSITORY_URL) {
                    authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
                }   
                snapshotRepository(url: SNAPSHOT_REPOSITORY_URL) {
                    authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
                }   
            }   
        }   
    }   
    task androidJavadocs(type: Javadoc) {
        source = android.sourceSets.main.java.srcDirs
        classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    }   
    task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
        classifier = 'javadoc'
        from androidJavadocs.destinationDir
    }   
    task androidSourcesJar(type: Jar) {
        classifier = 'sources'
        from android.sourceSets.main.java.sourceFiles
    }   
    artifacts {
        archives androidSourcesJar
        archives androidJavadocsJar
    }
}

说明:直接将该内容添加到build.gradle的末尾即可,不需要对上面的内容进行额外的修改!

第2步 编辑gradle.properties

编辑andriod公共库中的gradle.properties,添加以下内容。如果没有gradle.properties,则新建该文件。

## GROUP的值是自定义的。它表示群组;若要将该库发布的maven中,则它是库在maven中的groupId值。
GROUP=cn.skw.widget
## VERSION_NAME的值是自定义。它表示版本号;若要将该库发布的maven中,则它是库在maven中的版本号。
VERSION_NAME=1.0               
## POM_ARTIFACT_ID的值是自定义。它表示artifactId;若要将该库发布的maven中,则它是库在maven中的artifactId。
POM_ARTIFACT_ID=SelfWheelView

## 指定值。SNAPSHOT_REPOSITORY_URL是"库在nexus中的Repository Path的值"
SNAPSHOT_REPOSITORY_URL=http://127.0.0.1:8081/nexus/content/repositories/WheelView
## 指定值。RELEASE_REPOSITORY_URL是"库在nexus中Configuration栏的Default Local Storage Location的值"
RELEASE_REPOSITORY_URL=file:/home/project/skywang/opt/nexus/sonatype-work/nexus/storage/WheelView

## 指定值。nexus的用户名
NEXUS_USERNAME=admin
## 指定值。nexus的密码
NEXUS_PASSWORD=admin123

说明:
(1) GROUP: 它的值是自定义的,建议取包名。
(2) VERSION_NAME: 它的值是自定义的,建议取库的版本号。
(3) POM_ARTIFACT_ID: 它的值是自定义的,建议取库的名称。
(4) SNAPSHOT_REPOSITORY_URL: 它必须是nexus中Repository Path的值。
(5) RELEASE_REPOSITORY_URL: 它必须是nexus中库的Configuration栏目中Default Local Storage Location的值。
(6) NEXUS_USERNAME: 它必须是nexus的用户名。
(7) NEXUS_PASSWORD: 它必须是nexus的密码。

第3步 共享android库

在android库下面运行gradle uploadArchives来共享库到nexus中。该指令正常运行的界面如下所示。

img

再回到nexus中,点击仓库的"Browse Storage",会发现里面有aar文件。

img

这表示android公共库已被共享到nexus中!

4. 引用android公共库

下面介绍在其他的android工程中引用"上面共享到nexus中android公共库"的方法。

使用nexus中的android库,只需要在build.gradle中添加以下内容即可。

repositories {
    maven {
        // 本地服务器中WheelView仓库的路径
        url "http://127.0.0.1:8081/nexus/content/repositories/WheelView"
    }   
}

dependencies {
    // cn.skw.widget是仓库的GROUP值,SelfWheelView是仓库的POM_ARTIFACT_ID值,1.0是仓库版本号,@aar是android库的后缀名(如果是jar包,则不需要@aar)
    compile 'cn.skw.widget:SelfWheelView:1.0@aar'
}

点击查看使用android共享库的示例的源码

by skywang
Previous     Next