第一部分:私服概述
1.1 什么是私服
⭐ 老师强调 :私服 是架设在局域网内 的远程仓库,即公司内部的Maven远程仓库。每个员工的电脑连接私服,员工将项目打成jar发布到私服,其他项目组从私服下载依赖。私服还充当代理服务器,当私服上没有jar包时会从互联网中央仓库自动下载。
私服的应用场景:
- 不同项目组开发不同工程(如maven-dao工程开发完毕,maven-service从私服下载dao)
- 公司内部依赖共享
- 无外网环境下的依赖获取
私服架构图:
员工A ────→ 本地库 ────┐
├──→ 公司私服 ──→ Maven中央仓库
员工B ────→ 本地库 ────┘
⭐ 老师强调 :私服不是本地仓库,而是团队间共享构件的中间仓库,用于跨项目组复用如dao这类底层模块。可类比公司内不同部门做好零件后放公共库房,别的部门直接领用,不必重造。
1.2 私服使用三场景
| 场景 | 说明 |
|---|---|
| 安装并理解私服 | 搭建Nexus,理解仓库类型 |
| 下载第三方依赖 | 查找顺序:本地库 → 私服 → 外网 |
| 发布项目到私服 | 将项目打包发布供同事使用 |
⭐ 老师强调:难点在于依赖查找链路,可类比"先翻自己抽屉,没有问公司库房,再没就上网买",理清优先级就不会配错源。
第二部分:Nexus安装与配置
2.1 Nexus介绍
⭐ 老师强调 :Nexus是Maven仓库管理器,通过Nexus可以搭建Maven仓库,同时提供强大的仓库管理功能和构件搜索功能。
2.2 安装步骤
步骤1:解压
解压资料中的nexus-2.12.0-01-bundle.zip文件,存放到一个不含中文的目录下。
步骤2:修改配置
查看conf文件下的nexus.properties配置文件,核心是改端口号为未被占用的。
# Jetty section
# 端口号
application-port=8079
# 允许访问的主机监听
application-host=0.0.0.0
# nexus工程目录
nexus-webapp=${bundleBasedir}/nexus
# nexus访问路径
nexus-webapp-context-path=/nexus
步骤3:安装与启动
⭐ 老师强调 :必须以管理员身份运行cmd,不能直接搜普通窗口。
# 1. 以管理员身份打开cmd
# 2. 切换盘符
D:
# 3. 进入目录
cd D:\nexus\nexus-2.12.0-01\bin
# 4. 安装
nexus.bat install
# 5. 启动服务
nexus.bat start
# 停止服务
nexus.bat stop
# 卸载
nexus.bat uninstall
⭐ 老师强调 :易错点在于权限和顺序 ------没用管理员会失败,且必须先install再start,不能颠倒;切盘和cd进目录也要分步做。
步骤4:访问图形化界面
http://localhost:8079/nexus
⭐ 老师强调 :端口易混淆,需依实际配置确认。登录用户名
admin,密码admin123,获最高权限。
第三部分:Nexus仓库类型
3.1 四种仓库类型
⭐ 老师强调 :登录后左侧列表点
repositories,右侧可见所有仓库,重点看type类型字段。
| 类型 | 说明 |
|---|---|
| group(仓库组) | 合并多个hosted/proxy仓库,通常配置自己的Maven连接仓库组 |
| hosted(宿主库) | 内部项目发布,分release和snapshot |
| proxy(代理库) | 代理中央仓库、阿里云等远程库 |
| virtual(虚拟库) | 兼容Maven1版本,可忽略 |
3.2 宿主库细分
⭐ 老师强调:宿主库有三个,你本机上传的jar包存这里。
| 宿主库 | 存放内容 |
|---|---|
| 3rd party | 第三方jar包 |
| Releases | 稳定版本(release) |
| Snapshots | 快照版本(snapshot) |
⭐ 老师强调 :上传位置由项目版本号决定------版本为release则上传到release仓库,版本为snapshot则上传到snapshot仓库。
3.3 仓库组配置
⭐ 老师强调 :仓库组(group)是所有库的集合,我们主要用第一个。
public仓库组默认包含了Releases、Snapshots、3rd party、Central等仓库。
⭐ 老师强调 :下载依赖的仓库地址一般不用改 ,只有当你要代理小众公司开源库时才需配置私服代理。
第四部分:将项目发布到私服
4.1 配置settings.xml认证
⭐ 老师强调 :私服需要校验上传的账号密码是否和私服中的一致,需在
settings.xml的servers节点下配置。
Maven安装目录下conf/settings.xml:
<servers>
<!-- 稳定版本 -->
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<!-- 快照版本 -->
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
<!-- 第三方 -->
<server>
<id>thirdparty</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
⭐ 老师强调:
server是复数节点,本地项目要配一个,第三方项目还得再加,共三个server- 排版用Tab键而非空格
- 检查
servers和server的结束标签是否齐全,关闭时先关小的再关大的
4.2 配置pom.xml仓库地址
<distributionManagement>
<repository>
<id>releases</id>
<url>http://localhost:8079/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://localhost:8079/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
⭐ 老师强调 :
id标签的值要和settings.xml配置文件中的id值保持一致。
4.3 执行发布
⭐ 老师强调 :在该工程中执行
deploy命令,发布项目到私服上。
操作步骤:
- 先
clear项目 - 打开本地仓库,删掉旧包
- 双击
deploy(注意:install只到本地库,deploy才到私服) - 浏览器刷新私服,查看cn/ts/maven下的项目
⭐ 老师强调 :
install只到本地库,完成的是本地打包部署测试;deploy才推到私服。易错点是以为install会推到私服。
4.4 发布结果
- 稳定版本发布到Releases仓库(倒数第二个)
- 快照版本发布到Snapshots仓库(最后一个)
- 发布后刷新私服页面即可看到
⭐ 老师强调:稳定版与快照版在私服呈现位置不同,勿混淆查找位置。
第五部分:从私服下载jar包
5.1 方式一:mirrors镜像配置(推荐)
在settings.xml配置私服的镜像文件:
<mirror>
<id>nexusmaven</id>
<mirrorOf>*</mirrorOf>
<name>nexus maven</name>
<url>http://localhost:8079/nexus/content/groups/public</url>
</mirror>
⭐ 老师强调:
mirrorOf写*表示拦截所有请求,都重定向到私服,从私服下载jar包,私服没有再去中央仓库下载id须保证唯一即可- 把地址中的
http://127.0.0.1:8079换成自己的仓库组路径- 仓库组是路径第一部分,后面才是具体路径
5.2 方式二:pom.xml仓库配置(局部)
<repositories>
<repository>
<id>nexus</id>
<name>nexusmaven</name>
<url>http://localhost:8079/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
⭐ 老师强调 :这种方式不够理想,需要在每一个项目的pom文件中都添加相同配置,比较麻烦。
5.3 方式三:settings.xml全局配置(推荐)
<profile>
<id>dev</id>
<repositories>
<repository>
<id>nexus</id>
<url>http://localhost:8079/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>PublicRepositories</name>
<url>http://localhost:8079/nexus/content/groups/public</url>
</pluginRepository>
</pluginRepositories>
</profile>
激活配置:
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
⭐ 老师强调:三种方式本质是一个全局、一个局部,只要有一种连上私服就行。
5.4 依赖来源链
⭐ 老师强调 :依赖包的来源链是"私服服务器→本地仓库"。若只删本地仓库的包,重新添加还能从私服下回来;但若把私服上的包也删了,本地再删就彻底下载不下来了。
5.5 下载方式总结
| 方式 | 位置 | 特点 |
|---|---|---|
| mirrors镜像 | settings.xml | 优先用,能连上最好 |
| pom仓库 | 每个项目的pom | 局部,麻烦 |
| settings全局 | settings.xml的profile | 全局,推荐 |
⭐ 老师强调 :无论哪种配置方式,若私服没有某包,它会自动连外网去取。mirrors能用最好,局部和全局配置选其一即可。
第六部分:第三方jar包上传到私服
6.1 场景说明
⭐ 老师强调 :当公司内部网络不允许接外网 时,无法访问中央仓库或云镜像获取第三方依赖。解决办法是:在家用外网下载,通过安全U盘拷到公司,上传至私服,供他人使用。
6.2 操作步骤
步骤1:把jar包安装到本地仓库
mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dfile=fastjson-1.1.37.jar -Dpackaging=jar
步骤2:配置settings.xml权限
<server>
<id>thirdparty</id>
<username>admin</username>
<password>admin123</password>
</server>
步骤3:上传到私服
mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=fastjson-1.1.37.jar -Durl=http://localhost:8079/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
⭐ 老师强调:
- 从U盘或外部下载的jar包放D盘根目录便于体验
- 命令参数易错,建议直接让AI搜"怎么把第三方jar包上传到私服"
- 注意分清Linux版和Windows cmd版命令,复制时别贴错
url填本机127.0.0.1,且仓库组不能选错,要选第三方jar包的组
6.3 参数说明
| 参数 | 说明 |
|---|---|
-DgroupId |
组织标识 |
-DartifactId |
项目名 |
-Dversion |
版本号 |
-Dpackaging |
打包方式 |
-Dfile |
jar包路径 |
-Durl |
上传地址(第三方仓库路径) |
-DrepositoryId |
仓库id(与settings.xml对应) |
第七部分:注意事项
7.1 用毕还原配置
⭐ 老师强调 :讲完私服后若暂时不用,应把Maven改过的私服配置改回初始状态 ,并停掉本地私服,避免连私服;到公司需连时再配。
⭐ 老师强调:这是易错点,很多人忘改回导致构建异常。
7.2 版本切换
⭐ 老师强调 :在hello fan项目里若改回hello项目,把版本号后的快照版本改成稳定版本即可,前缀不变 。改完名字和版本后,必须清理项目使配置生效。
快照版与稳定版区别:
| 版本 | 说明 |
|---|---|
| SNAPSHOT | 快照版本,随开发变动 |
| RELEASE | 稳定版本,固定 |
⭐ 老师强调:易错点是只改版本号却忘了清理,或把前缀也改了。