一、简介
Sonatype Nexus 软件仓库服务器,官网:help.sonatype.com/repomanager…
可以作为Maven私服,也支持npm仓库、nuget仓库、ruby仓库、docker镜像仓库等。
二、安装
2.1 Windows
- 下载路径:help.sonatype.com/repomanager…
- 解压即可
bin目录下,使用nexus.exe/run启动
etc/nexus-default.properties可以修改默认配置信息,例如端口号。
- 2.x的版本,初始账户密码是
admin和admin123 - 3.x的版本,初始账户是
admin,密码在sonatype-work\nexus3\admin.password文件里
2.2 Docker
- 创建docker-compose.yml文件
version: '3.1' # Docker Compose文件版本,使用版本3.1
services: # 定义服务列表
nexus3: # 定义Nexus服务
container_name: nexus3 # 指定nexus容器名称
image: sonatype/nexus3 # 镜像
ports:
- 8081:8081 # 端口映射(GUI界面端口)
- 8082:8082 # docker端口映射(如果有需要通过端口上传的仓库类型,则需要开放端口)
environment: # 设置环境变量,用于配置Nexus。
- "NEXUS_CONTEXT=" # 可选,设置Nexus的上下文路径(如果有反向代理等情况时使用)。
- "NEXUS_DATA=/nexus-data" # 设置Nexus数据的存储路径。
- "NEXUS_ADMIN_PASSWORD=admin123" # 设置Nexus管理员密码(请更改为更安全的密码)。
- "NEXUS_SECURITY_RANDOMPASSWORD=false" # 可选,设置为false以禁止在启动时随机生成密码。
volumes:
- nexus-data:/nexus-data # 将数据挂载到容器路径
restart: always
mem_limit: 2g # 限制容器内存2GB
volumes:
nexus-data # 定义nexus-data的数据卷
- 启动nexus3服务:
docker-compose up -d - 获取默认密码:
# 进入容器
docker-compose exec nexus3 /bin/bash
# 获取密码
cat /opt/sonatype/sonatype-work/nexus3/admin.password
三、界面使用
3.1 仓库
3.1.1 对象存储 Blob Stores
系统默认自带 default 对象存储,可以自行添加新的对象存储,这里添加一个docker存储docker镜像。
注意:需要设置大小限制,否则容易把硬盘撑爆。
3.1.2 清理策略 Cleanup Policies
有三种规则:
- 按照组件上传时间,清理多少天前的组件
- 按照组件使用时间,也就是最后下载时间,清理多少天内没有被触发下载的组件
- 按照正则规则匹配asset name进行清理。
3.1.3 仓库配置 Repositories
- 仓库类型
- proxy(代理):代理仓库就是对远程仓库的一种代理,从远程仓库下载构件和插件然后缓存在Nexus仓库中,这个仓库是只读的。
- hosted(宿主/托管):宿主仓库主要用于存放项目部署的构件、或者第三方构件用于提供下载。主要存放内部系统的一些api包。
- group(仓库组):仓库的一种组合策略,并不存在实在意义的依赖,只是作为一种中转站的作用存在。只读仓库,组合proxy、hosted等仓库。
- Nexus内置仓库类型
- maven-central:代理中央仓库、策略为Release、只会下载和缓存中央仓库中的发布版本构件。
- maven-releases:策略为Release的宿主仓库、用来部署组织内部的发布版本内容。
- maven-snapshots:策略为Snapshot的宿主仓库、用来部署组织内部的快照版本内容。
- maven-public:该仓库将上述所有策略为Release的仓库聚合并通过一致的地址提供服务。
- nuget-hosted:用来部署nuget构件的宿主仓库
- nuget.org-proxy:代理nuget远程仓库,下载和缓冲nuget构件。
- nuget-group:该仓库组将nuget-hosted与nuget.org-proxy仓库聚合并通过一致的地址提供服务。
- maven-public:该仓库组将maven-central,maven-releases与maven-snapshots仓库聚合并通过一致的地址提供服务。
- 支持的仓库内容
3.1.3.1 maven2(proxy) 仓库
代理仓库一般都是代理外部开源仓库,首次编译引用仓库中的lib时,Nexus3会通过代理仓库获取lib转发到项目,并且缓存到服务器上,下次即可直接从私服的缓存中获取。
- 名称,这是仓库标识。
- 版本策略,选择默认的Release,因为我们假定要代理的都是正经Maven仓库。必要时也可选择Mixed。
- 布局策略(校验maven格式),选择宽容,因为如果选择严格,有时候会出现莫名的问题。
- 远程存储,也就是所代理的服务器。
- Auto blocking enabled:✔则表示:如果检测到远程对等点不可达/无响应,则自动阻止存储库上的出站连接。
- Maximum component age:重新比对本地缓存和远程仓库,Release版本策略情况下默认为-1。
- Maximum metadata age:检测远程仓库前,缓存元数据的时间。
- Blob store:对象存储的位置,选择default,也就是系统默认存储。
- Strict Content Type Validation:验证上传到此存储库的所有内容都是适合于存储库格式的MIME类型
- Not found cache enabled:是否对请求不在代理仓库中响应进行缓存
- Not found cache TTL:缓存过期时间
3.1.3.2 maven2(hosted)仓库
用于存储公司内部服务依赖,需要配置权限。
- 名称,这是仓库标识。
- 版本策略,正式版的选择Release。如果是用来测试的仓库,则选择Snapshot。
- 布局策略:Strict,选择严格模式。
- Blob store:对象存储的位置,选择default,也就是系统默认存储。
- Deployment policy:发布策略,Snapshot情况下选择Allow redeploy,允许多次部署。
3.1.3.3 maven(group)
- Online:允许接收外来请求
- Strict Content Type Validation:验证上传到此存储库的所有内容都是适合于存储库格式的MIME类型
- Member repositories:选择分配为同组的成员,会按照顺序从上到下依次访问。
3.2 系统
3.2.1 能力配置 Capabilitied
主要是新增或修改服务器的基础URL,如果放到外网,用到反向代理的时候需要设置这个。
3.2.2 HTTP配置 HTTP
用来配置HTTP连接超时和重试的,如果网络不好,可以设置得宽松一点。
3.2.3 系统任务 Task
一些定时任务,统计磁盘,定时清理之类的。
四、上传jar包到仓库
4.1 settings配置私服
<?xml version="1.0" encoding="UTF-8"?>
<settings
xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 设置本地仓库路径 -->
<localRepository></localRepository>
<pluginGroups></pluginGroups>
<proxies></proxies>
<!-- 服务器 用户名密码配置 -->
<servers>
<server>
<id>release</id>
<username>账号</username>
<password>密码</password>
</server>
<server>
<id>snapshots</id>
<username>账号</username>
<password>密码</password>
</server>
</servers>
<!-- 镜像配置,阿里云 -->
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<!-- 环境配置,多款环境,多套配置 -->
<profiles>
<!-- default 环境 -->
<profile>
<id>default</id>
<repositories>
<repository>
<id>release</id>
<name>release</name>
<url>http://127.0.0.1:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
<repository>
<id>snapshots</id>
<name>snapshots</name>
<url>http://127.0.0.1:8081/repository/maven-snapshots/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
<properties>
<repository.id>release</repository.id>
<repository.name>release</repository.name>
<repository.url>http://127.0.0.1:8081/repository/maven-public/</repository.url>
<repository-snapshots.id>snapshots</repository-snapshots.id>
<repository-snapshots.name>snapshots</repository-snapshots.name>
<repository-snapshots.url>http://127.0.0.1:8081/repository/maven-snapshots/</repository-snapshots.url>
</properties>
</profile>
<!-- 开发环境 -->
<profile>
<id>dev</id>
<repositories>
<repository>
<id>release</id>
<name>release</name>
<url>http://127.0.0.1:8081/repository/nexus-service-dev/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
<repository>
<id>snapshots</id>
<name>snapshots</name>
<url>http://127.0.0.1:8081/repository/nexus-service-dev-snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
<properties>
<repository.id>release</repository.id>
<repository.name>release</repository.name>
<repository.url>http://127.0.0.1:8081/repository/maven-snapshots/</repository.url>
<repository-snapshots.id>snapshots</repository-snapshots.id>
<repository-snapshots.name>snapshots</repository-snapshots.name>
<repository-snapshots.url>http://127.0.0.1:8081/repository/nexus-service-dev-snapshots/</repository-snapshots.url>
</properties>
</profile>
<!-- 测试环境 -->
<profile>
<id>test</id>
<repositories>
<repository>
<id>release</id>
<name>release</name>
<url>http://127.0.0.1:8081/repository/nexus-service-test/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
<repository>
<id>snapshots</id>
<name>snapshots</name>
<url>http://127.0.0.1:8081/repository/nexus-service-test-snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
<properties>
<repository.id>release</repository.id>
<repository.name>release</repository.name>
<repository.url>http://127.0.0.1:8081/repository/nexus-service-test/</repository.url>
<repository-snapshots.id>snapshots</repository-snapshots.id>
<repository-snapshots.name>snapshots</repository-snapshots.name>
<repository-snapshots.url>http://127.0.0.1:8081/repository/nexus-service-test-snapshots/</repository-snapshots.url>
</properties>
</profile>
<!-- release环境 -->
<profile>
<id>release</id>
<repositories>
<repository>
<id>release</id>
<name>release</name>
<url>http://127.0.0.1:8081/repository/nexus-service-release/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
<repository>
<id>snapshots</id>
<name>snapshots</name>
<url>http://127.0.0.1:8081/repository/nexus-service-test-snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
<properties>
<repository.id>release</repository.id>
<repository.name>release</repository.name>
<repository.url>http://127.0.0.1:8081/repository/nexus-service-release/</repository.url>
<repository-snapshots.id>snapshots</repository-snapshots.id>
<repository-snapshots.name>snapshots</repository-snapshots.name>
<repository-snapshots.url>http://127.0.0.1:8081/repository/nexus-service-test-snapshots/</repository-snapshots.url>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>default</activeProfile>
</activeProfiles>
</settings>
4.2 手动上传
# jar包上传
mvn deploy:deploy-file -s D:\settings.xml -DgroupId=org.example -DartifactId=test-case-core -Dversion=2.8.1.RELEASE -Dpackaging=jar -DpomFile=D:\food\test-case-core-2.8.1.RELEASE.pom -Dfile=D:\food\test-case-core-2.8.1.RELEASE.jar -Durl=http://127.0.0.1:8081/repository/nexus-service-dev/ -DrepositoryId=dev -X
# pom文件上传
mvn deploy:deploy-file -s D:\settings.xml -DgroupId=org.example -DartifactId=test-case-core -Dversion=2.8.1.RELEASE -Dpackaging=pom -Dfile=D:\test-case-core-2.8.1.RELEASE.pom -Durl=http://127.0.0.1:8081/repository/nexus-service-dev-snapshots -DrepositoryId=dev -X
| 命令 | 说明 |
|---|---|
| -DgroupId=org.example | 依赖分组 |
| -DartifactId=test-case-core | 组件名 |
| -Dversion=2.8.1.RELEASE | 版本号 |
| -Dpackaging=jar | 上传的类型是jar类型 |
| -DpomFile=D:\food\test-case-core-2.8.1.RELEASE.pom | pom文件位置 |
| -Dfile=D:\food\test-case-core-2.8.1.RELEASE.jar | jar的本地磁盘位置 |
| -Durl=http://127.0.0.1:8081/repository/nexus-service-dev/ | hosted资源库的地址 |
| -DrepositoryId=dev | setting.xml文件中配置的ID |
| -X | debug模式 |
4.3 IDEA上传
<!--包依赖管理工具-->
<distributionManagement>
<repository>
<id>release</id>
<name>Nexus Release Repository</name>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://localhost:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>