公司多个项目引用同一个库,每次更新库时需要通知所有项目更新,比较麻烦,因此需要将公共库放到私库中进行管理。
项目中引用了很多central中的开发库,每次都要重新加载,编译速度慢,可以通过私库的proxy模式将central中用到的开发库下载到公司服务器中,提高编译速度。
Nexus下载(免费)
Windows版本下载下来是nexus-3.15.2-01-win64.zip,解压。
Nexus安装
请确保已安装了JDK8,如果没有安装,可在官网下载安装。
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
- 运行中输入
cmd,打开控制台; - 定位到
nexus-3.15.2-01-win64\nexus-3.15.2-01\bin目录下; - 输入
nexus.exe/run,等待安装; - 安装成功后,浏览器中输入http://127.0.0.1:8081/,进入Nexus Repository管理页面。
- 点击右上角登录,默认账号密码为admin/admin123。
- 也可在
cmd中输入nexus.exe/install,安装到系统服务中,重启电脑将自动启动。
安装服务时如果输出Could not open SCManager,那么需要以管理员身份运行cmd。
Nexus配置
创建用户
默认的账户除了admin/admin123外,还有anonymous/anonymous。admin拥有所有配置权限,anonymous只能用于查看,不能上传开发包。我们可以为开发人员创建专属账户,创建步骤如下:
- 进入
设置\Security\Users,点击Create local user,进入创建用户页面;

- 输入用户信息,点击下方的
Create local user保存账户;

其他
nexus-3.15.2-01\etc\nexus-default.properties可配置默认端口和host及访问根目录;nexus-3.15.2-01\bin\nexus.vmoptions可配置内存参数,防止占用内存太大;- 可修改maven-releases的部署策略为
Allow redeploy,这样可以重复部署已存在的版本,而无需手动删除。不过Allow redeploy一般用于snapshots(快照),适用于开发调试过程中方便联调。
Module生成开发包自动上传Nexus(Android Studio)
- 项目的gradle.properties中添加常量定义
#MAVEN需要的配置
POM_GROUP_ID=com.test.android
POM_ARTIFACT_ID=test
VERSION=1.0.0
RELEASE_URL=http://127.0.0.1:8081/repository/maven-releases/
SNAPSHOT_URL=http://127.0.0.1:8081/repository/maven-snapshots/
NAME=admin
PASSWORD=admin123
# 下面这部分POM的配置不是必须的,使用默认生成的也可以
# 库名称
POM_NAME=Test Library
# 库的打包格式为aar, 常见的还有jar
POM_PACKAGING=aar
# 库的描述
POM_DESCRIPTION=Test Library
# POM文件中指向你网站的地址
POM_URL=http://www.test.com.cn/
# SCM是指版本管理工具
POM_SCM_URL=http://www.test.com.cn/
POM_SCM_CONNECTION=http://www.test.com.cn/
POM_SCM_DEV_CONNECTION=http://www.test.com.cn/
# 你的开放协议相关信息
POM_LICENCE_NAME= Apache License Version 2.0
POM_LICENCE_URL= http://www.test.com.cn/
POM_LICENCE_DIST=Apache License Version 2.0
# 开发者的相关信息
POM_DEVELOPER_ID=test
POM_DEVELOPER_NAME=test
- Module的build.gradle同级目录下添加maven_push.gradle
apply plugin: 'maven'
apply plugin: 'signing'
configurations {
deployerJars
}
repositories {
mavenCentral()
}
// 判断版本是Release or Snapshots
def isReleaseBuild() {
return !VERSION.contains("SNAPSHOT")
}
// 获取仓库url
def getRepositoryUrl() {
return isReleaseBuild() ? RELEASE_URL : SNAPSHOT_URL
}
afterEvaluate { project ->
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment {
MavenDeployment deployment -> signing.signPom(deployment)
}
pom.version = VERSION
pom.artifactId = POM_ARTIFACT_ID
pom.groupId = POM_GROUP_ID
repository(url: getRepositoryUrl()) {
authentication(userName: NAME, password: PASSWORD) // maven授权信息
}
// (非必须)库生成的pom.xml文件内容
pom.project {
name POM_NAME
packaging POM_PACKAGING
description POM_DESCRIPTION
url POM_URL
scm {
url POM_SCM_URL
connection POM_SCM_CONNECTION
developerConnection POM_SCM_DEV_CONNECTION
}
licenses {
license {
name POM_LICENCE_NAME
url POM_LICENCE_URL
distribution POM_LICENCE_DIST
}
}
developers {
developer {
id POM_DEVELOPER_ID
name POM_DEVELOPER_NAME
}
}
}
}
}
}
}
// 进行数字签名
signing {
// 当 发布版本 & 存在"uploadArchives"任务时,才执行
required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
sign configurations.archives
}
// 以下内容非必须
// type显示指定任务类型或任务, 这里指定要执行Javadoc这个task,这个task在gradle中已经定义
task androidJavadocs(type: Javadoc) {
// 设置源码所在的位置
source = android.sourceSets.main.java.sourceFiles
}
// 生成javadoc.jar
task androidJavadocsJar(type: Jar) {
// 指定文档名称
classifier = 'javadoc'
from androidJavadocs.destinationDir
}
// 生成sources.jar
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.sourceFiles
}
// 产生相关配置文件的任务
artifacts {
archives androidSourcesJar
archives androidJavadocsJar
}
- Module的build.gradle开头添加maven_push.gradle的引用
apply from: 'maven_push.gradle'
- Gradle中对应Module的Tasks下运行uploadArchives

可能碰到的问题
-
如果开发包中引用了aar,可能会出现上传成功但无法引用的问题,提示
pom.xml文件中缺少group id,此时可将module的build.gradle中引用的aar改为provided方式,即使其不生成到pom.xml中。compile(name: 'testlibrary', ext: 'aar')应改为
provided(name: 'testlibrary', ext: 'aar')
项目中引用私库的开发包
- 项目的
build.gradle中添加私库的地址;
allprojects {
repositories {
jcenter()
google()
maven {
url 'http://127.0.0.1:8081/repository/maven-public/'
// 或 url 'http://127.0.0.1:8081/repository/maven-releases/'
}
}
}
- module的
build.gradle中添加引用;
implementation 'com.test.android:test:1.0.0'
默认生成maven是aar格式,但是以上面的方法引用的时候只能加载到module本身的jar,因此引用的jar还需要单独添加引用。
因此,若module中有包含其他的jar,且不想再单独引用,可通过下面的方式引用:
implementation 'com.test.android:test:1.0.0@aar'
也可直接引用最新版本:
implementation 'com.test.android:test:latest.release@aar'
本文介绍了如何搭建Maven Nexus私有仓库,包括下载、安装、配置及创建用户。此外,还详细讲解了如何在Android Studio中设置Module以自动上传开发包到Nexus,以及解决可能出现的问题,如aar引用问题。最后,讨论了项目中如何引用私库的开发包。
790

被折叠的 条评论
为什么被折叠?



