Android Studio +Nexus搭建Maven私服

Nexus概述

Nexus是一个基于maven的仓库管理的社区项目.主要的使用场景就是可以在局域网搭建一个maven私服,用来部署第三方公共构件或者作为远程仓库在该局域网的一个代理.简单举几个例子就是:

  1. 第三方jar包可以放在nexus上,项目可以直接通过Url和路径配置直接引用.方便进行统一管理.
  2. 同时有多个项目在开发的时候,一些共用基础模块可以单独抽取到nexus上,需要用的项目直接从nexus上拉取就行(基础模块的实现,维护和部署可以交给专门的人员,其他项目不用关心代码实现,这样也可以达到保证核心代码不泄露).
  3. 一些封闭开发的过程中开发机是不能上公网的,所以连接central repository和下载jar就比较麻烦,这时就可以用nexus搭建起来一个介于公网和局域网之间的桥梁。

开始搭建

1.下载sonatype nexus oss

这里使用的是Nexus OSS开源版,官网下载地址:http://www.sonatype.org/nexus/go/ 建议安装3.x以上的版本,安装2.x的版本需要进行一大堆配置,具体配置可自行去谷歌或百度,以下使用仅针对3.x版本

2.安装并运行sonatype nexus oss

首先确认服务器上是否已经安装JDK,nexus oss的运行需要JDK7或者JDK8。如果没有安装JDK,请先安装JDK。 下载下来的nexus oss是一个zip或者tar.gz压缩包,需要将其解压。你可以将其解压到任何位置,nexus oss的运行对其所在位置没有什么特殊要求。解压后会看到两个文件夹,一个是nexus-x.xx.x-xx,一个sonatype-work。其中nexus-x.xx.x-xx是nexus oss的主目录,所有运行程序和配置文件都在里面。sonatype-work是nexus-oss的数据目录,nexus-oss运行过程的maven仓库数据都在这里面。进入nexus-x.xx.-x-xx/bin目录,window平台的服务器直接通过命令行 nexus.exe /run 运行nexus.bat脚本就可以了.

3.配置sonatype nexus oss

运行成功之后,在浏览器打开http://localhost:8081/nexus就可以看到nexus oss的控制面板。其中localhost为当前服务器ip,端口Nexus默认为8081,进入web管理页面后右上角登陆,Nexus默认的账号密码是admin:admin123。登录后可以看到以下界面:

Android Studio +Nexus搭建Maven私服_第1张图片

进入设置后,点击左侧的repositories查看现有的仓库列表. 

Android Studio +Nexus搭建Maven私服_第2张图片

每个仓库都有自己的属性,选择一个仓库就可以查看这个仓库的一些具体信息。我们的目的主要是把我们的项目代码发布到这些仓库里去,既然要发布到这些仓库上去,我们就不想我们的代码外泄出去,那我们就要选择hosted类型的仓库,hosted类型是Nexus oss所在自己本地的服务器上的仓库,比较安全。我们进行操作的时候,最主要的还是maven-releases和maven-snapshots两个仓库,两个仓库有Deployment Policy部署协议上的区别,一个是,maven-releases上的是Disable Redeploy(不允许重复部署),意思就是部署上去的就是正式版本的库,如果之后更新lib只能以更新版本号的形式操作。而maven-snapshots则是Allow Redeploy(允许重复部署),顾名思义,就是不需要更新版本号,只要groupId,artifactId,version相同就可以进行覆盖,一般用于你的module还没进行完全测试的时候。如要上传至maven-snapshots仓库,需要在VERSION_NAME增加SNAPSHOT关键字,如

VERSION_NAME = 0.0.1-SNAPSHOT

4.配置库并上传

首先新建一个Android项目,然后new module,在module的bulid.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
    }
}

然后在该module目录下添加grade.properties配置文件:

GROUP=对应maven的groupId值,如果名字中包含SNAPSHOT字符,项目将会发布到snapshots仓库,没有则发布到releases仓库  
VERSION_NAME=对应maven的version值  
POM_ARTIFACT_ID=对应maven的artifactId值  
  
SNAPSHOT_REPOSITORY_URL=前面配置的snapshots仓库地址  
RELEASE_REPOSITORY_URL=前面配置的releases仓库地址  
  
NEXUS_USERNAME=登录nexus oss的用户名  
NEXUS_PASSWORD=登录nexus oss的密码

修改完之后,在AndroidStudio右边的Gradle面板中找到对应的module,然后在upload里有一个uploadArchive选项,双击就可以了,然后就build success了.

5.引用

私有库上传成功以后,我们就可以在所有项目中直接引用这个私有库了。引用的方法很简单,在项目的build.gradle里allprojects下添加:(ip是我自己的内网服务器地址)

 maven {
            url 'http://192.168.1.116:8081/repository/maven-releases/'
        }

然后就可以在app目录下build.gradle里直接compile就可以了

compile 'com.ztemap.app.mydemolib:mytestlib:0.0.2'

 

注:

1.常见的GBK编码,javadoc报错。在项目根目录下的build.gradle下添加以下配置

allprojects {
    repositories {
        jcenter()
    }
    tasks.withType(Javadoc) {
        options.addStringOption('Xdoclint:none', '-quiet')
        options.addStringOption('encoding', 'UTF-8')
    }
}

 

你可能感兴趣的:(Android Studio +Nexus搭建Maven私服)