当前位置: 首页 > news >正文

Maven仓库与Maven私服架构

Maven

  • Maven仓库
  • Maven私服架构
    • Maven私服构建
      • 将项目发布到私服
      • 从私服下载jar包
        • 第一种方式
        • 第二种方式
        • 第三种方式
      • 第三方jar包发布到私服

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 中用于环境隔离的配置单元,,它允许定义不同环境的专属配置,需要时通过激活使其生效,不激活则不生效。<id>dev</id> 表示这个 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

在这里插入图片描述

上传效果:

在这里插入图片描述

http://www.dtcms.com/a/347396.html

相关文章:

  • Vue 3 useModel vs defineModel:选择正确的双向绑定方案
  • 自然语言处理——05 Transformer架构和手写实现
  • 微前端架构核心要点对比
  • 小区物业对大楼顶面的巡查通常是定期巡查+特殊情况下的临时巡查相结合
  • 认识模块化及常见考点
  • 【秋招笔试】2025.08.23京东秋招笔试题
  • onnx入门教程(二)—— PyTorch 转 ONNX 详解
  • C#多线程同步利器:Monitor全解析
  • 安卓10.0系统修改定制化____如何修改固件 去除开机后默认的屏幕锁定
  • AcWing 114. 【0x07】国王游戏
  • C代码学习笔记(一)
  • Windows打开命令窗口的几种方式
  • 使用 PSRP 通过 SSH 建立 WinRM 隧道
  • 注意力机制中为什么q与k^T相乘是注意力分数
  • 每日定投40刀BTC(22)20250802 - 20250823
  • 编程刷题-染色题DFS
  • 03_数据结构
  • 在 CentOS 7 上搭建 OpenTenBase 集群:从源码到生产环境的全流程指南
  • MSPM0G3507工程模板创建
  • 微信小程序自定义组件开发(上):从创建到数据通信详解(五)
  • 纠删码技术,更省钱的分布式系统的可靠性技术
  • 使用springboot开发-AI智能体平台管理系统,统一管理各个平台的智能体并让智能体和AI语音设备通信,做一个属于自己的小艾同学~
  • Dubbo vs Feign
  • 个人思考与发展
  • 探秘北斗卫星导航系统(BDS):架构、应用与未来蓝图,展现中国力量
  • 详细说一说JIT
  • Redis面试精讲 Day 28:Redis云原生部署与Kubernetes集成
  • Js逆向 拼夕夕anti_content
  • 深入解析Spring Boot自动配置原理:简化开发的魔法引擎
  • Java基础第2天总结