Nexus概述
Nexus是一个基于maven的仓库管理的社区项目.主要的使用场景就是可以在局域网搭建一个maven私服,用来部署第三方公共构件或者作为远程仓库在该局域网的一个代理.简单举几个例子就是:
开始搭建
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。登录后可以看到以下界面:
进入设置后,点击左侧的repositories查看现有的仓库列表.
每个仓库都有自己的属性,选择一个仓库就可以查看这个仓库的一些具体信息。我们的目的主要是把我们的项目代码发布到这些仓库里去,既然要发布到这些仓库上去,我们就不想我们的代码外泄出去,那我们就要选择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')
}
}