Maven私服(Nexus)

第一部分:私服概述

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命令,发布项目到私服上。

操作步骤:

  1. 先clear项目
  2. 打开本地仓库,删掉旧包
  3. 双击deploy(注意:install只到本地库,deploy才到私服)
  4. 浏览器刷新私服,查看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 稳定版本,固定

⭐ 老师强调:易错点是只改版本号却忘了清理,或把前缀也改了。

相关推荐
敲上瘾2 小时前
分布式系统——Redis哨兵:自动故障转移与选举原理
linux·数据库·redis·分布式·缓存·微服务
旋生万物1 天前
分形自相似:微服务、缓存、Prompt 模板为什么长一样
人工智能·缓存·微服务·云原生·prompt
Thomas.Sir1 天前
第27课:SkyWalking全链路追踪实战 & 微服务调用链路分析
spring cloud·微服务·skywalking
cheems95271 天前
从统一响应到 Swagger:一篇讲清微服务接口文档设计未命名
java·微服务·架构·状态模式
唠点键盘之外的2 天前
27 存量系统接大模型:旁挂一个 AI 微服务,老架构一行不改
人工智能·微服务·架构
自强的小白2 天前
项目整个架构的构建和演进。(重点!)
spring cloud·微服务·架构
码上上班2 天前
基于 K3s 的微服务容器化与 GitOps 持续交付平台
微服务·云原生·架构
kevien_G12 天前
微服务之OpenFeign最佳实践
java·微服务·架构
凤山老林2 天前
Spring Boot 集成 Spring Modulith:搭一个能拆微服务的模块化单体
spring boot·spring·微服务