介绍
Nexus:Nexus 是一个强大的 Maven 仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。如Android远程仓库依赖,Java服务端应用程序依赖等,都很方便。
Docker方式
准备
ubuntu上已经安装docker,docker安装过程可以参考笔者另一篇文章。
运行
在docker上安装nexus的步骤提炼自官网,也可以直接参考官方手册(直接看持久化数据章节):Docker
- 在宿主机上创建一个卷,用于存放数据:
sudo mkdir -p /usr/local/docker/nexus-data && sudo chown -R 200 /usr/local/docker/nexus-data
- 在docker上下载运行(自动下载)nexus镜像
sudo docker run -d -p 8081:8081 --name nexus -v /usr/local/docker/nexus-data:/nexus-data sonatype/nexus3
-d:后台运行容器,并返回容器ID
-p:指定端口映射,格式为:主机(宿主)端口:容器端口
--name:容器名称
-v:绑定一个数据卷
- 停止nexus,给足够时间释放资源
sudo docker stop --time=120 nexus
验证
请求html页面:
curl http://localhost:8081
二进制包方式方式:
下载并安装
- 下载:Nexus免费版官方下载,若网络环境不好需要上网工具,填写简单的问卷调查单就可以免费下载,Nexus可以支持多种操作系统,这里选择UNIIX版本,地址:Nexus Repository OSS - Software Component Management | Sonatype
- 解压:
- 将下载后的.tar.gz文件放到/usr/local/下
- 解压到当前目录,解压后会生成两个目录,分别是nexus-3.43.0-01(安装目录)和sonatype-work(工作目录)。解压指令:sudo tar -zxvf nexus-3.43.0-01-unix.tar.gz
bw@bw-linux:/usr/local$ ls -ahl
total 201M
drwxr-xr-x 12 root root 4.0K 12月 13 13:51 .
drwxr-xr-x 14 root root 4.0K 8月 9 19:48 ..
drwxr-xr-x 2 root root 4.0K 8月 9 19:48 bin
drwxr-xr-x 2 root root 4.0K 8月 9 19:48 etc
drwxr-xr-x 2 root root 4.0K 8月 9 19:48 games
drwxr-xr-x 2 root root 4.0K 8月 9 19:48 include
drwxr-xr-x 3 root root 4.0K 8月 9 19:48 lib
lrwxrwxrwx 1 root root 9 12月 12 18:26 man -> share/man
drwxr-xr-x 10 root root 4.0K 12月 13 13:51 nexus-3.43.0-01
-rwxrwxrwx 1 root root 201M 12月 13 11:05 nexus-3.43.0-01-unix.tar.gz
drwxr-xr-x 2 root root 4.0K 8月 9 19:48 sbin
drwxr-xr-x 7 root root 4.0K 8月 9 19:51 share
drwxr-xr-x 3 root root 4.0K 12月 13 13:51 sonatype-work
drwxr-xr-x 2 root root 4.0K 8月 9 19:48 src
运行
运行指令:/usr/local/nexus-3.43.0-01/bin/nexus start
验证
请求html页面:
curl http://localhost:8081
Nexus配置
配置前的准备
首先浏览器中进入Nexus管理页面:http://localhost:8081,右上角点击登录,需要提供初始密码:
cat /usr/local/docker/nexus-data/admin.password
随后系统要求修改初始密码,这里修改密码为:***
仓库简单介绍
首先按照上图1、2两步设置和仓库,进入仓库列表页面。列表中只需要关注maven-*相关仓库即可,这里分别对A,B,C三个类型仓库做一个说明:
A:代理,代理中央maven库,来自互联网,具体地址可以点进去看,这里不展开说明。
B:组,打包A,C等库到一起,单点对外提供服务。
C:本机(宿主机)仓库,存放自定义上传库,release-发行库稳定库,snapshots-调试库不稳定库。
添加阿里云代理
添加阿里云,1是可以增加访问国外库速度,2是可以添加中央maven库中没有的资源。
- 创建库,点击如下按钮:
- 选择maven2(proxy)
- 输入仓库名,可随意,这里用aliyun-publick-proxy
- 输入阿里仓库地址,https://maven.aliyun.com/repository/public。(这里提供阿里maven仓库集合,可根据自身需求灵活选择:仓库服务 (aliyun.com))
- 点击创建仓库后,自动返回仓库列表。由于笔者做安卓开发需要更多库,重复1-4步再添加其他代理库,同理可根据自身开发需求添加一个或多个库。
- 将上述新增库添加到组内:仓库列表页点击maven-public, 将新增的库添加到组内,并调整仓库优先级。点击保存。
宿主机仓库配置
宿主机上传使用的地址选择哪个(些)根据团队开发而定,也就是上述的maven-release和maven-snapshots仓库地址。关于上传有一点需要注意,就是是否允许同一版本库重复上传,由于单人/多人协同开发中,maven版本号匹配机制以及本地仓库缓存机制,强烈建议禁用重复上传。这里用maven-release仓库演示,maven-snapshots仓库同理。
- 在仓库列表页点击maven-release仓库,进入仓库配置页。
- 找到部署规则节点,将其设置为Disable redeploy。点击保存。
使用
建议:上述配置完成后,团队中使用时可能会考虑到权限管理,可以创建开发账号代替管理账号,详细用法可以参考下一章节,权限管理。
笔者这里使用开发角色账号做使用演示,管理员角色账号操作相同。
下载
在浏览页面中,拷贝对外暴露的组地址。(代理和宿主机上的仓库,都会从该地址下载。)
maven
maven中使用私服链接下载,在pom.xml中配置。参考阿里配置文档:仓库服务 (aliyun.com)
gradle
gradle7.+版本中使用私服链接下载,在project级build.gradle或者setting.gradle中配置。
pluginManagement {
repositories {
// gradlePluginPortal()
// google()
// mavenCentral()
maven{
allowInsecureProtocol true
url 'http://172.17.101.51:8081/repository/maven-public/'
}
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
// google()
// mavenCentral()
maven{
allowInsecureProtocol true
url 'http://172.17.101.51:8081/repository/maven-public/'
}
}
}
- 用私服替换掉所有的默认仓库
- 由于私服未采用https,需要加上标志:allowInsecureProtocol true
- sync验证
上传
这里使用maven-release库作为上传库,maven-snapshots同理。如果团队规模大,对库稳定性有极高要求,建议同时加上maven-snapshots库,便于测试、维护。在浏览页面中,拷贝maven-release地址。
maven
maven中使用私服链接上传,在pom.xml中配置。参考阿里配置文档:仓库服务 (aliyun.com)
gradle
- 配置需要上传模块/库级的gradle文件,这里用的gradle版本是7.+,以Android模块举例:
plugins {
id 'com.android.library'
id 'maven-publish'
}
android {
...
}
publishing {
publications{
maven(MavenPublication){
artifactId = 'lib_base'
groupId = 'com.xx.xx.xx'
version = '1.0.0'
}
}
repositories {
maven{
allowInsecureProtocol true
url 'http://172.17.101.51:8081/repository/maven-releases/'
credentials {
username '***'
password '***'
}
}
}
}
这里只需要配置2步:
-
- 添加插件:maven-publish
- 添加publishing任务:publishing{}
- 上传
- 方式一:Android工程执行根目录通过命令行执行:./gradlew publish
- 方式二:双击工程publish任务
上传结果验证
打开nexus管理页面,按下图步骤,进入maven-release库内部,可以看到刚才上传的库
权限管理
在nexus3.x中,默认有admin和anonymous两个角色权限,开发中,如果团队较大,直接把admin权限下放容易被欠缺经验的同学搞崩溃,而anonymous缺少上传库权限,那么就强烈建议创建一个开发者角色:
创建角色
由于nexus默认只有2个角色,因此这里先创建带有固定权限的角色。
- 创建角色
- 填写基本信息
- 分配权限,分配权限的原则是够用就行。这里只需要分配maven-release和maven-snapshots两个库权限,并且尽量不分配两库下:*/delete/admin-edit这三个权限。
- 集成匿名角色
- 保存并退回到角色列表页面,可以看到刚才创建的角色
创建用户
- 点击用户->创建本地用户
- 保存后返回用户列表页面可以看到刚才创建的dev用户
- 验证
将使用-上传章节中的账号密码改为此处创建的角色账号密码,再次执行上传验证。笔者这里已经验证通过就不再详述。
总结
Nexus私服在maven和gradle体系的技术团队中,十分好用。当然大家也可以直接使用阿里现成的maven私库,免费空间足够小型项目使用:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台