使用Nexus建立私服
私服不是Maven的概念,它仅仅是一种衍生出来的特殊的Maven仓库。
建立私服,可以降低中央仓库负荷、节省外网带宽、加速Maven构建、自己部署构件等,从而高效地使用Maven。
安装与启动
Nexus是典型的Java Web应用,有两种安装方式:war和自带Jetty包。(未找到Nexus3.10.0-04的war包)
Ps:运行Nexus3.10.0-04需要jre8,本文环境如下:
安装平台 | Nexus版本 | JDK版本 |
---|---|---|
windows64位 | Nexus3.10.0-04 | jdk1.8.0_121 |
1)下载安装
下载地址:https://www.sonatype.com/down...
官方文档:https://help.sonatype.com/rep...
下载到指定目录并解压,我们可以看到解压后有通常两个文件
nexus-x.x.x | Nexus运行所需要的文件,如运行脚本,依赖jar包等 |
sonatype-work | 该目录包含Nexus生成的配置文件、日志文件、仓库文件等 |
2)运行Nexus
首先进入Nexus的bin目录(当然你也可以配置到环境变量Path中),执行如下命令
nexus.exe /run | 安装并启动Nexus,类似于编译工作,执行一次即可,安装完成会启动Nexus |
nexus.exe /start | 开启Nexus服务 |
nexus.exe /stop | 关闭Nexus服务 |
nexus.exe /restart | 重启Nexus服务 |
nexus.exe /status | 查看Nexus运行状态 |
nexus.exe /install | 安装Nexus到本地服务 |
nexus.exe /uninstall | 卸载Nexus本地服务 |
卸载Nexus:确保Nexus服务未启动,本地服务未安装Nexus,删除Nexus整个目录即可。
访问Nexus:http://localhost:8081
默认端口为8081,可到 etc/nexus-default.properties 修改端口
默认管理员账户:admin admin123
配置Nexus
进入Nexus页面,可查看Browse界面,登录管理员账户后,可在Browse界面上传构件,并进入Administration页面
Browse | 查找构件,查看远程仓库 【上传构件,需登录管理员账户】 |
Administration | 登录管理员账户可见,可进行仓库配置、用户权限管理、日志管理、系统设置等等 |
1)关于内置仓库
Nexus内置了4个仓库:
Name | Type | Format | Version Pollcy | Blob store | 说明 |
---|---|---|---|---|---|
maven-central | proxy | maven2 | Release | default | 代理中央仓库 |
maven-release | hosted | maven2 | Release | default | 第三方发布版本仓库 |
maven-snapshots | hosted | maven2 | Snapshot | default | 第三方快照版本仓库 |
maven-public | group | maven2 | —— | default | 仓库组,包含以上三个仓库 |
关于仓库说明
Type | 设置仓库的类型 | |
---|---|---|
proxy | 代理类型,代理远程仓库,如阿里镜像 | |
hosted | 宿主类型,内部项目的发布仓库(公司内部人员,发布上去存放的仓库) | |
group | 仓库组类型,又叫组仓库,方便开发人员自己设定的仓库 | |
Format | maven2 | 其实还有maven1格式,并有virtual(虚拟类型)与之对应,本文暂不涉及,仅供了解 |
Version Pollcy | 指定仓库存储什么类型的构件 | |
Release | 发布版本 | |
Snapshot | 快照版本 | |
Mixed | 发布版本和快照版本 | |
Blob store | 指定仓库存储目录地址,可在Blob Stores中创建新的目录 |
Nexus仓库分类的概念
2)配置仓库
进入Administration - Repositories - Create repository
推荐仓库配置
Name | Type | Format | Version Pollcy | Blob store | 说明 |
---|---|---|---|---|---|
maven-release | hosted | maven2 | Release | default | 存放内部项目的发布仓库 |
maven-snapshots | hosted | maven2 | Snapshot | default | 存放内部项目的快照仓库 |
3rd-party | hosted | maven2 | Release | default | 存放无法从公共仓库获得的第三方发布版本的构件仓库 |
aliyun-nexus | proxy | maven2 | Release | default | 代理阿里云仓库 http://maven.aliyun.com/nexus... |
maven-central | proxy | maven2 | Release | default | 代理中央仓库 https://repo1.maven.org/maven2/ |
maven-public | group | maven2 | —— | default | 按管理上述仓库,按上述顺序排序。 |
3)部署Maven从Nexus下载构件
1 使用POM设置远程仓库 + 插件仓库(详情可查看《Maven》阅读总结(二)Maven仓库)
只对当前Maven项目有效
<project>
...
<repositories>
<!-- 远程仓库 -->
<repository>
<id>...</id>
<name>...</name>
<url>...</url>
<releases>
<enabled>...</enabled> <!-- 是否支持 -->
<updatePolicy>...</updatePolicy> <!-- 更新策略 -->
<checksumPolicy>...</checksumPolicy> <!-- 检验策略 -->
</releases>
<snapshots>
<enabled>...</enabled>
<updatePolicy>...</updatePolicy>
<checksumPolicy>...</checksumPolicy>
</snapshots>
</repository>
</repositories>
<!-- 插件远程仓库 -->
<pluginRepositories>
<pluginRepository>
<id>...</id>
<name>...</name>
<url>...</url>
<releases>
<enabled>...</enabled>
<updatePolicy>...</updatePolicy>
<checksumPolicy>...</checksumPolicy>
</releases>
<snapshots>
<enabled>...</enabled>
<updatePolicy>...</updatePolicy>
<checksumPolicy>...</checksumPolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
...
</project>
2 使用settings.xml配置
settings.xml并不直接支持repositories和pluginRepositories,
Maven提供了Profile机制,能让用户将仓库配置放到settings.xml
<settings>
...
<profiles>
<profile>
<id>...</id> <!-- 指定profile的id,此profile包含了相关仓库配置 -->
<repositories>
<!-- 远程仓库 -->
<repository>
<id>...</id>
<name>...</name>
<url>...</url>
<releases>
<enabled>...</enabled> <!-- 是否支持 -->
<updatePolicy>...</updatePolicy> <!-- 更新策略 -->
<checksumPolicy>...</checksumPolicy> <!-- 检验策略 -->
</releases>
<snapshots>
<enabled>...</enabled>
<updatePolicy>...</updatePolicy>
<checksumPolicy>...</checksumPolicy>
</snapshots>
</repository>
</repositories>
<!-- 插件远程仓库 -->
<pluginRepositories>
<pluginRepository>
<id>...</id>
<name>...</name>
<url>...</url>
<releases>
<enabled>...</enabled>
<updatePolicy>...</updatePolicy>
<checksumPolicy>...</checksumPolicy>
</releases>
<snapshots>
<enabled>...</enabled>
<updatePolicy>...</updatePolicy>
<checksumPolicy>...</checksumPolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<!-- 激活指定Profile,当执行Maven构建时,激活的Profile会将仓库的配置应用到项目中 -->
<activeProfile>...</activeProfile>
</activeProfiles>
...
</settings>
3 Maven镜像配置
在配置远程仓库和远程插件仓库后,Maven还是会访问中央仓库。
通过镜像配置,Maven对任何仓库的构件下载请求都会转到私服中。
<settings>
...
<mirrors>
<mirror>
<id>nexus</id> <!-- 匹配所有远程仓库,访问镜像仓库 -->
<name>my nexus</name>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id> <!-- 指定profile的id,此profile包含了相关仓库配置 -->
<repositories>
<!-- 远程仓库 -->
<repository>
<id>central</id> <!-- 覆盖超级POM中央仓库,开启快照版本支持 -->
<url>http://central</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<!-- 插件远程仓库 -->
<pluginRepositories>
<pluginRepository>
<id>central</id> <!-- 覆盖超级POM中央插件仓库,开启快照版本支持 -->
<url>http://central</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<!-- 激活指定Profile,当执行Maven构建时,激活的Profile会将仓库的配置应用到项目中 -->
<activeProfile>nexus</activeProfile>
</activeProfiles>
...
</settings>
将远程仓库和插件仓库的id都设置为central,覆盖超级POM中央仓库的配置。
同时因为镜像配置,仓库和插件仓库的url已无关紧要,因为所有请求都会通过镜像访问私服地址。
配置仓库和插件仓库的主要目的是开启对快照版本下载的支持,当Maven需要下载发布版或快照版本时,它首先检查central,看该类型的构件是否支持,得到正面回答之后,再根据镜像匹配规则转而访问私服仓库地址。
4 部署构件至Nexus
1 使用Maven部署构件至Nexus
a)配置POM设置发布仓库 快照仓库
<project>
...
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repository</name>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshots Repository</name>
<url>http://localhost:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
...
</project>
b)Nexus的仓库对于匿名用户是只读的,实现部署构件,还需要在settings.xml中配置认证信息
<settings>
...
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>******</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>******</password>
</server>
<server>
<id>3rd-party</id>
<username>admin</username>
<password>******</password>
</server>
</servers>
...
</settings>
2 手动部署第三方构件至Nexus
a)可在Nexus上传构件,设置坐标
b)使用mvn deploy:deploy-file插件目标
mvn deploy:deploy-file -Dfile=x -DgroupId=x -DartifactId=x -Dversion=x -Dpackaging=x -DrepositoryId=3rd-party -Durl=http://localhost:8888/repository/3rd-party/
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。