news 2026/6/15 21:48:14

【Maven】仓库与私服架构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Maven】仓库与私服架构

Maven仓库

Maven仓库概念:用来统一存储所有Maven共享构建的位置就是仓库
在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件,Maven 仓库能帮助我们管理构件,它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。
Maven仓库布局:
根据Maven坐标定义每个构建在仓库中唯一存储路径,采用层级目录存储,例如:
依赖 org.springframework:spring-core:5.3.20 在本地仓库中的路径为:org/springframework/spring-core/5.3.20/
仓库的分类
  • 本地仓库Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。默认情况下,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录,Maven 本地仓库默认被创建在改目录下。要修改默认位置,在 %Maven_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。
  • 远程仓库中央仓库:是Maven默认的远程仓库 http://repo1.maven.org/maven2,中央仓库包含了绝大多数流行的开源Java构件以及源码、作者信息、SCM、信息、许可证信息等,一般来说简单的Java项目依赖的构件都可以在这里下载到。私服:是一种特殊的远程仓库,它是架设在局域网内的仓库
运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
Maven本地仓库配置
  1. 全局本地仓库(所有操作系统用户均影响)
settings.xml 存放路径为 %MAVEN_HOME%\conf\settings.xml,本地仓库路径对操作系统中所有用户生效,任何用户执行 Maven 命令都会使用该配置,修改该文件会影响所有使用该Maven的用户的本地仓库。
2. 用户本地仓库(仅影响使用该配置文件的用户或程序)
settings.xml 存放路径为 用户目录/.m2/settings.xml,本地仓库路径仅对当前操作系统用户生效,其他用户登录系统后使用自己的默认或自定义配置,该文件可以在任意目录。
修改配置文件设置Maven本地仓库(以全局设置为例),编辑 D:\installation\apache-maven-3.6.0\conf 文件

Maven私服架构

maven私服介绍
公司在自己的局域网内搭建自己的远程仓库服务器,称为私服, 私服服务器即是公司内部的 maven 远程仓库, 每个员工的电脑上安装 maven 软件并且连接私服服务器,员工将自己开发的项目打成 jar 并发布到私服服务器,其它项目组从私服服务器下载所依赖的构件(jar)。
私服还充当一个代理服务器,当私服上没有 jar 包会从互联网中央仓库自动下载。
Nexus介绍
Nexus 是 Maven 仓库管理器, 通过 nexus 可以搭建 maven 仓库,同时 nexus 还提供强大的仓库管理功能,构件搜索功能等。

Maven私服构建

nexus安装
解压 nexus-2.12.0-01-bundle.zip 文件,存放到一个不含中文的目录下,查看conf文件下的nexus.properties配置文件,可以修改对应的配置
application-port 表示该 Nexus 应用程序将使用 8081 端口监听客户端的访问请求;
保证端口号不被其他程序占用,nexus-webapp定义NexusWeb应用的根目录路径;
nexus-webapp-context-path=/nexus 设置 Web 应用的路径,是 URL 中用于区分不同 Web 应用的路径片段,这里配置为/nexus意味着访问 Nexus 的完整基础 URL 为http://服务器IP:8081/nexus。
nexus的安装命令:使用管理员运行cmd命令窗口,切换目录nexus\nexus-2.12.0-01\bin目录下,执行 nexus.bat install 进行安装。执行 nexus.bat start 启动服务,执行 nexus.bat stop 停止服务。
补充nexus的卸载命令:使用管理员运行cmd命令窗口,切换目录nexus\nexus-2.12.0-01\bin目录下,执行nexus.bat uninstall进行卸载
访问图形化界面:打开浏览器,输入 http://localhost:端口号/nexus访问
点击log in,进行登录。默认用户名:admin,默认密码:admin123
nexus仓库类型
nexus提供了不同的仓库类型
  • hosted,宿主仓库, 部署自己的 jar 到这个类型的仓库,包括 releases、snapshot、3rd party 三部分, Releases 公司内部发布版本仓库,Snapshots 公司内部测试版本仓库,3rd Party 是第三方仓库用于存储非本团队开发的依赖,需手动上传到 Hosted 仓库统一管理。
  • proxy,代理仓库, 用于代理远程的公共仓库,如 maven 中央仓库,用户连接私服,私服自动去中央仓库下载 jar 包或者插件。
  • group,仓库组,将多个不同类型的仓库合并成一个统一的访问地址,简化依赖获取流程。当项目请求依赖时,它会按预设顺序从包含的仓库中查找,找到后返回给项目,无需项目逐个配置多个仓库地址。通常我们配置自己的 maven 连接仓库组,Group仓库组也是可以自己进行定制的。
  • virtual(虚拟):兼容 Maven1 版本的 jar 或者插件。

将项目发布到私服

需要在客户端即部署要部署的工程电脑上配置 maven 环境,并修改 settings.xml 文件, 配置连接私服的用户和密码 。此用户名和密码用于私服校验,因为私服需要知道上传的账号和密码是否和私服中的账号和密码一致。
在 settings.xml 文件的 servers 节点下进行配置,定义稳定版本的id名称和开发版本的id名称,用户名密码,id必须要和私服宿主库的名字一致
<server> <id>releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>snapshots</id> <username>admin</username> <password>admin123</password> </server>
配置项目 pom.xml,配置私服仓库的地址,本公司的自己的 jar 包会上传到私服的宿主仓库,根据工程的版本号决定上传到哪个宿主仓库,如果版本为 release 则上传到私服的 release 仓库,如果版本为snapshot 则上传到私服的 snapshot 仓库。
<distributionManagement> <repository> <id>releases</id> <url>http://localhost:8081/nexus/content/repositories/releases/</url> </repository> <snapshotRepository> <id>snapshots</id> <url>http://localhost:8081/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement>
注意:这里的 id 标签的值要和 settings.xml配置文件中的id值保持一致,distributionManagement 标签与 dependencies 标签是同级标签,这里的 url 地址来自于私服仓库的 Repository Path。
在该工程中执行 deploy 命令,发布项目到私服上,如图成功。

从私服下载jar包

第一种方式
全局配置
修改 Maven 安装目录下的 conf/settings.xml,或用户目录下的 .m2/settings.xml,在 mirrors 标签中配置私服的镜像文件
<mirror> <id>nexusmaven</id> <mirrorOf>*</mirrorOf> <name>nexus maven</name> <url>http://localhost:8081/nexus/content/groups/public/</url> </mirror>
id 是镜像的唯一标识;mirrorOf 是镜像要替代的仓库范围,* 表示拦截所有的请求都重定向到私服,从私服下载jar包,私服没有再去中央仓库下载;url 是镜像仓库的实际地址。
先把自己的某个项目发布到私服中,然后删除掉本地仓库中的 jar 包,再使用其他项目去依赖该 jar 包,查看是否从私服中下载。
第二种方式
项目级配置
修改项目的pom配置文件,添加仓库的配置:
<repositories> <repository> <id>nexus</id> <name>nexusmaven</name> <url>http://localhost:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>public</id> <url>http://localhost:8081/nexus/content/groups/public/</url> <name>pluginRepositories</name> </pluginRepository> </pluginRepositories>
repositories 标签用于配置依赖包仓库,pluginRepositories 标签用于配置插件仓库
第三种方式
在settings.xml配置文件中添加配置,完成统一的设置
<profile> <id>dev</id> <repositories> <repository> <id>nexus</id> <url>http://localhost:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>public</id> <name>Public Repositories</name> <url>http://localhost:8081/nexus/content/groups/public/</url> </pluginRepository> </pluginRepositories> </profile>
profile 是 Maven 中用于环境隔离的配置单元,,它允许定义不同环境的专属配置,需要时通过激活使其生效,不激活则不生效。dev 表示这个 Profile 的唯一标识是 dev,方便后续通过 id 激活。
激活配置
<activeProfiles> <activeProfile>dev</activeProfile> </activeProfiles>

第三方jar包发布到私服

先在settings.xml配置文件中配置用户名密码,加上第三方仓库的认证权限
<server> <id>thirdparty</id> <username>admin</username> <password>admin123</password> </server>
上传到私服命令:
mvn deploy:deploy-file -DgroupId=junit -DartifactId=junit -Dversion=4.9 -Dpackaging=jar -Dfile=junit-4.9.jar -Durl= http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
上传效果:
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 14:30:01

3D医学影像分割实战:5步快速掌握深度学习预训练模型

3D医学影像分割实战&#xff1a;5步快速掌握深度学习预训练模型 【免费下载链接】tutorials 项目地址: https://gitcode.com/gh_mirrors/tutorial/tutorials 为什么你需要这篇指南&#xff1f; 在医学影像分析领域&#xff0c;获取高质量的标注数据往往是最头疼的问题…

作者头像 李华
网站建设 2026/6/15 12:36:37

BabylonJS魔法:学习指南

目录 第一章&#xff1a;启航&#xff01;三维世界的入场券 1.1 WebGL与BabylonJS&#xff1a;你的浏览器里藏着一个宇宙 3D图形学极简史&#xff1a;从三角形到元宇宙 BabylonJS的“超能力清单”&#xff1a;为什么选它&#xff1f; 环境搭建&#xff1a;Node.js、TypeScr…

作者头像 李华
网站建设 2026/6/15 13:34:07

高效部署大模型:TensorRT + INT8量化技术深度解析

高效部署大模型&#xff1a;TensorRT INT8量化技术深度解析 在大模型落地的“最后一公里”&#xff0c;性能瓶颈常常让团队陷入两难&#xff1a;训练好的模型精度达标&#xff0c;却在生产环境中跑不动。一个典型的BERT-Large推理请求&#xff0c;在PyTorch上轻轻松松耗时80ms…

作者头像 李华
网站建设 2026/6/15 0:14:13

3分钟掌握鼠鬚管输入法:从基础配置到高级定制

3分钟掌握鼠鬚管输入法&#xff1a;从基础配置到高级定制 【免费下载链接】squirrel 项目地址: https://gitcode.com/gh_mirrors/squi/squirrel 鼠鬚管作为一款基于中州韵引擎的开源输入法&#xff0c;以其出色的可定制性和优雅的设计赢得了众多技术爱好者的青睐。今天…

作者头像 李华
网站建设 2026/6/14 18:08:03

Agentic AI+提示工程:信息安全架构师的“智能助手”

Agentic AI提示工程&#xff1a;信息安全架构师的智能助手从零到一实战指南 副标题&#xff1a;用自主智能体与精准提示词重构安全架构设计流程摘要/引言 安全架构师的现代困境&#xff1a;在复杂与速度间寻找平衡 作为一名从业15年的信息安全架构师&#xff0c;我深知这个角色…

作者头像 李华
网站建设 2026/6/15 13:32:08

LangFlow在电商商品描述生成中的实际应用

LangFlow在电商商品描述生成中的实际应用 在电商平台日益激烈的竞争中&#xff0c;商品详情页的内容质量已经成为影响转化率的关键因素。一段精准、有吸引力的描述不仅能清晰传达产品价值&#xff0c;还能激发用户的购买欲望。然而&#xff0c;面对成千上万的商品品类和频繁上新…

作者头像 李华