【Maven技术专题】「知识盲区」教你如何使用深入分析Maven配置私服仓库的使用指南(基础篇)

Maven私服的使用实战

    • 将内部构件部署到私服仓库
      • 什么是仓库和仓库组
      • 远程仓库的定义
        • 仓库定义基本结构
          • 仓库结构的属性介绍
      • 部署部件到远程仓库
      • 远程仓库的认证
        • 用户名+密码认证
          • 案例参考
        • 私钥进行鉴权
      • 镜像mirror
        • 镜像仓库的工作原理

在这里插入图片描述

将内部构件部署到私服仓库

如果想先学好什么如何将内部构件部署到私服仓库,那么首先需要先了解什么是仓库和仓库组。

什么是仓库和仓库组

  • 仓库(repository)的概念实际上是一个用于存储和分发构件(artifact,如JAR、WAR、pom.xml文件等)的服务器。仓库的URL用于指向这个仓库,以便Maven客户端可以从中下载所需的构件。此外,多个仓库还是可以组成仓库组,那么什么是仓库组?

  • 仓库组(repository group)是Nexus Repository Manager等工具引入的一个概念,它本质上是将多个仓库的URL地址合并成一个新的URL。当Maven客户端要从这个仓库组的URL下载某个构件时,系统会在仓库组包含的所有仓库中搜索,这一操作称为仓库路由。它可以大大提高工作效率,因为你不再需要单独地在所有的仓库中搜寻。

远程仓库的定义

仓库的URL可以指向仓库组。仓库组将多个仓库集合在一起,当指向仓库组时,实际上是从仓库组中下载所有仓库的构件。

<repositories><repository><id>central</id><name>Central Repository</name><url>https://repo.maven.apache.org/maven2</url><layout>default</layout><snapshots><enabled>false</enabled></snapshots></repository>
</repositories>
仓库定义基本结构
  • <repositories>元素中定义了一个名为central的仓库,其URL为"https://repo.maven.apache.org/maven2"。
  • <layout>元素指明了这个仓库使用的结构是Maven默认的结构,即artifact在仓库中的存储路径会按照artifact的groupId、artifactId和version信息来组织。
  • <snapshots>元素表明这个仓库不接受snapshot版本的构件,snapshot版本通常用于开发过程中的临时版本。只有一个release版本的构件才能被放入这个仓库。

包含这段配置的文件是所有Maven项目都会继承的超级POM,开发者也可以自己定义远程仓库,假如要将默认的远程仓库设置为Wizard,在模块的POM文件中,作如下定义:

<repositories><repository><id>wizard</id><name>Wizard Repository</name><url>http://repository.wizard.com/maven2/</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots><layout>default</layout></repository>
</repositories>
仓库结构的属性介绍
  • releasessnapshots:它们用来控制Maven对于发布版构件和快照版构件的下载。除了enabled,还有updatePolicy和checksumPolicy两个属性。

  • updatePolicy:表示从远程仓库检查更新的频率,默认是daily每天检查一次。

    • never:从不
    • always:每次构建都检查
    • inverval X :每隔X分钟检查一次,X为任意正整数。
  • checksumPolicy:表示检查检验和文件的策略。当构件被部署到Maven仓库中时,会同时部署对应的校验和文件。在下载构件时,Maven会验证校验和文件,如果失败,怎么办?当该值为默认的warn时,只会输出警告信息。其他值:fail 构建失败 ignore 忽略错误信息

部署部件到远程仓库

如果您想将构件部署到私服,可以使用Maven的deploy命令。为了配置部署相关信息,您需要在项目的pom.xml文件中添加distributionManagement标签。

pom.xml文件中,distributionManagement标签用于配置构件的部署目标。您可以指定私服的URL、认证信息以及其他相关配置,以下是一个示例的distributionManagement配置:

  <repository><id>my-repo</id><url>https://example.com/repository</url><uniqueVersion>false</uniqueVersion></repository>
</distributionManagement>

在上述示例中,repository标签指定了私服的唯一标识符(id)和URL(url)。您可以根据实际情况修改这些值。

通过配置distributionManagement标签,您可以告诉Maven将构件部署到指定的私服。在执行deploy命令时,Maven将使用配置的URL和认证信息将构件上传到私服。这种配置方式使得构件的部署变得简单和自动化,确保构件能够被正确地发布到私服中,供其他项目使用。

<distributionManagement><repository><id>myrelease</id><name>my release repo</name><url>http://localhost:8081/nexus/content/repositories/releases/</url></repository><snapshotRepository><id>mysnapshot</id><name>my snapshot repo</name><url>http://localhost:8081/nexus/content/repositories/snapshots/</url></snapshotRepository>
</distributionManagement>

在工程的pom文件中添加下面配置

<distributionManagement><repository><id>myrelease</id><name>my release repo</name><url>http://ip:8081/nexus/content/repositories/releases/</url></repository><snapshotRepository><id>mysnapshot</id><name>my snapshot repo</name><url>http://ip:8081/nexus/content/repositories/snapshots/</url></snapshotRepository>
</distributionManagement>

远程仓库的认证

当需要进行鉴权时,可以在Maven的settings.xml文件中配置server节点,并提供相应的用户名和密码,或者私钥。在Maven的settings.xml文件中,server节点用于配置与仓库的鉴权信息。每个server节点对应一个仓库,可以配置该仓库的认证信息

用户名+密码认证

如果您需要进行身份验证,请在settings.xml文件中添加以下servers节点,并配置用户名和密码,如下所示的结构:

<server><id>{POM文件/Setting文件中定义的远程仓库ID}</id><username>{账号用户名}</username><password>{账号密码}</password>
</server>

在上述示例中,server节点的id指定了仓库的唯一标识符,username和password分别指定了用于鉴权的用户名和密码。

案例参考

作为一个搭配使用可以看一下认证鉴权和仓库的对应关系和匹配关系,如下所示。

<repositories><repository><id>wizard</id><name>Wizard Repository</name><url>http://repository.wizard.com/maven2/</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots><layout>default</layout></repository>
</repositories>
<!--配置一些仓库的鉴权信息 -->
<server><id>wizard</id><username>root</username><password>qwe!@#</password>
</server>
私钥进行鉴权

如果使用私钥进行鉴权,可以使用privateKey元素来配置私钥的路径和密码,通过在settings.xml中配置server节点,并提供相应的鉴权信息,Maven在与仓库进行交互时将使用这些信息进行认证,确保只有经过授权的用户才能访问仓库。

  <servers><server><id>{POM文件/Setting文件中定义的远程仓库ID}</id><privateKey>/path/to/private-key</privateKey><passphrase>your-passphrase</passphrase></server></servers>
</settings>

在上述示例中,privateKey指定了私钥文件的路径,passphrase指定了私钥的密码(如果有的话)。

镜像mirror

如果仓库X可以提供仓库Y存储的所有内容,我们可以将X视为Y的一个镜像。镜像仓库的存在是为了解决地理位置的限制,有时候镜像仓库可以提供比中央仓库更快的服务。

镜像仓库的工作原理

当开发人员从仓库Y请求某个依赖项时,镜像仓库X会先检查自己的存储中是否有该依赖项的副本。如果有,镜像仓库X会立即返回该依赖项,而不需要从仓库Y下载。这样可以节省时间和带宽,提供更快的服务。

在这里插入图片描述

镜像仓库的设置通常在项目的构建工具(如Maven)的配置文件中进行。通过配置镜像仓库,开发人员可以选择从镜像仓库获取依赖项,而不是直接从中央仓库下载。这样可以加快构建过程,并提高开发效率。

例如,http://maven.net.cn/content/groups/public/,http://repo1.maven.org/maven2

在中国的镜像,当然跑得比西方快,所以可以用它来替代中央仓库,在settings.xml文件中设置如下配置即可

<mirror><id>myMirror</id><!-- 将所有的下载请求统一路由到私服,限制在线下载--><mirrorOf>*</mirrorOf><!-- 这里可以填写仓库id,或者*表示所有仓库 --><url>http://localhost:8081/nexus/content/groups/public/</url>
</mirror>

强制将所有对下载构件的请求,重定位到镜像的路径。这样可以限制项目只从私服上下载构件,从而达到对三方件的控制(在大公司尤为重要,因为涉及到安全问题)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/218221.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云原生周刊:Kubernetes v1.29 新特性一览 | 2023.12.11

开源项目推荐 kubedog Kubedog 是一个用于在 CI/CD 部署管道中监视和跟踪 Kubernetes 资源的库。 这个库被用于 werf CI/CD 工具中&#xff0c;在部署过程中跟踪资源。 RunWhen Local runwhen-local 是一个工具&#xff0c;用于在本地环境中运行 runwhen 脚本。runwhen 是…

vue面试题总结

Vuex和redux有什么区别&#xff1f;他们的共同思想是什么&#xff1f; Vuex 和 Redux 都是用于管理状态的状态管理库&#xff0c;它们在不同的前端框架中有着相似的思想&#xff0c;但也有一些关键的区别。 区别&#xff1a; 框架依赖&#xff1a; Vuex 是为 Vue.js 框架设计…

完爆MyBatis-Plus?来领略一下 MyBatis-Flex 的优雅魅力!

目录 一、Mybatis-Flex的有什么特点&#xff1f; 二、Mybatis-Flex和同类框架对比 2.1、功能对比 2.2、性能对比 三、Mybatis-Flex支持的数据库类型 四、Mybatis-Flex快速入门 Mybatis-Flex 是一个优雅的 Mybatis 增强框架&#xff0c;它非常轻量、同时拥有极高的性能与灵…

Golang WebView:打造跨平台的桌面应用

引言 随着互联网的发展和智能设备的普及&#xff0c;Web应用成为了主流的应用开发方式之一。然而&#xff0c;有些场景下仍然需要使用桌面应用来满足特定的需求。为了结合Web技术和桌面应用的优势&#xff0c;Golang提供了一种名为"WebView"的库&#xff0c;它可以帮…

AMEYA360:海康存储PCIe4.0固态硬盘A4000介绍

海康存储即将发布PCIe4.0固态硬盘新品A4000&#xff0c;搭载全新定制主控及高品质3D NAND闪存颗粒&#xff0c;最大顺序读取速度达7100MB/s&#xff0c;提供五年质保服务。 2022年&#xff0c;海康存储开始在PCIe 4.0固态硬盘领域全面发力&#xff0c;推出C4000 ECO、C4000等多…

【虹科干货】关于JSON数据库

文章速览&#xff1a; 什么是JSON什么是JSON数据库JSON数据库的显著优势关于JSON数据库的Q&A 如何理解JSON数据库&#xff1f;作为NoSQL数据库的一种类型&#xff0c;JSON数据库有哪些优势呢&#xff1f;JSON数据库如何运作&#xff0c;它为应用程序开发者带来了哪些价值呢…

【OpenVINO】使用OpenVINO实现 RT-DETR 模型 INT8量化推理加速

使用OpenVINO实现 RT-DETR 模型 INT8量化推理加速 1. 使用 OpenVINO 实现 RT-DETR 模型 INT8量化1.1 神经网络压缩框架 &#xff08;NNCF&#xff09;1.2 准备校准数据集1.2.1 下载COCO验证数据集1.2.2 Validator包装器1.2.3 转换用于量化的数据集 1.3 定义模型精度校验方法1.4…

DBA轻松应对慢查询挑战,使用NineData这款工具就够了!

对于一个 DBA 来说&#xff0c;从公司数据库系统的稳定程度可以看出他的能力几何&#xff0c;一个优秀的 DBA 不仅要保证数据库的稳定运行&#xff0c;还需要有能力有效处理数据库的各种突发性能问题&#xff0c;而最常见的性能问题&#xff0c;就是慢查询。 我们公司规模比较…

docker-compose 单机容器编排

docker-compose 单机容器编排 dockerfile&#xff1a;先配置好文件&#xff0c;然后build&#xff0c;镜像------->容器 docker-conpose既可以基于dockerfile&#xff0c;也可以基于镜像&#xff0c;一件事拉起镜像和容器。 docker-compose 核心就是yml文件&#xff0c;可…

Android共享元素动画

示例在两个 Activity 之间实现共享元素动画 首先&#xff0c;在布局文件中定义两个界面的 SurfaceView&#xff0c;并为它们设置相同的 android:transitionName 属性 <SurfaceViewandroid:transitionName"shared_sv"android:id"id/preview_surface"andr…

java正则表达式语法

java正则表达式语法 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 解密Java正则表达式语法&#xff1a;精通匹配规则&#xff0c;开启字符串之旅 正则表达式&am…

共享门店会在未来新零售占据主角吗?

共享门店作为一种创新的商业模式&#xff0c;在未来新零售领域中可能会占据一定的角色&#xff0c;但具体是否会成为主角&#xff0c;还需要根据市场的发展和技术的进步来判断。 首先&#xff0c;共享门店模式通过资源共享、风险共担、客户共享和收益共享等方式&#xff0c;为…

WordPress插件你好多莉( Hello Dolly )可否卸載

什么是你好多莉Hello Dolly WordPress插件 你好多莉是 WordPress插件 简单的预装在 WordPress 上。 如果您激活后者&#xff0c;它将显示出名曲的歌词“ 你好&#xff0c;多莉 “要 路易斯阿姆斯特朗. 您可能已经注意到&#xff0c;在阅读插件说明时&#xff0c;还不够清楚。 …

C语言之数组精讲(1)

目录 数组 数组的声明&#xff08;使用数组前的准备&#xff09; 访问数组&#xff08;数组的使用方法&#xff09; 数组的遍历 数组初始化 1.在声明变量时&#xff0c;除了必要的情况下&#xff0c;都需要对变量进行初始化。 2.我们还可以像下面在声明数组时不指定元素…

python-爬取壁纸

代理池的&#xff0c;防止IP 被封 找到图片真实地址 现在看到的只是图片的预览地址 (previews) 1.检查&#xff1a; 2.鼠标变为箭头时查看网页源代码 关于怎样在源代码中找到图片的真实地址 ??? 为什么在源代码界面 ctrl f 时候搜索的是 .png ??? 首先图片地址是以 .j…

Android源码分析 理解Refbase

前言 最近解决稳定性问题&#xff0c;遇到sp问题&#xff0c;本文就简单梳理RefBase和sp、wp下。 RefBase RefBase是Android中所有对象的始祖&#xff0c;类似于MFC中的CObject及Java中的Object对象。在Android中&#xff0c;RefBase结合sp和wp&#xff0c;实现了一套通过引…

11 月公链盘点:Solana 强势复苏,Blast 飞速崛起,Web3 游戏市值猛涨

作者&#xff1a;stellafootprint.network 11 月的加密市场充满了重大事件&#xff0c;从比特币 ETF 的热议到币安 40 亿美元的和解&#xff0c;均获得了极大的关注。在以太坊继续主导 TVL 和像 Arbitrum 这样的 Layer 2 成为焦点的同时&#xff0c;我们也见证了 Solana 引人注…

android某个功能和应用快捷方式

android某个功能和应用快捷方式 最近接受到一个任务&#xff0c;给应用内的一个功能点创建一个快捷方式&#xff0c;方便用户操作快捷、 一&#xff0c;第一种方式&#xff0c;只适用Build.VERSION.SDK_INT>25 以上的版本 /** shortcutId 快捷方式的标示&#xff0c;自己定…

通过 RIOT 将 AWS ElastiCache 迁移到阿里云 Tair

本文通过示例介绍了 RIOT 如何轻松地将数据从 AWS ElastiCache 迁移到云原生内存数据库&#xff08;如 Tair 和云数据库 Redis 版&#xff09;。 1. 准备资源迁移 1.1. 源代码 AWS ElastiCache cache.r6g.xlarge。它有三个数据分片&#xff0c;与 Redis 6.2 兼容。 AWS EC2 t2.…

TypeScript中的基本类型

提示&#xff1a;TypeScript中的基本类型 文章目录 前言基本类型1.类型声明2.自动类型判断3.类型断言 前言 TypeScript &#xff08;计算机编程语言&#xff09;简称&#xff1a;TS&#xff0c;是 JavaScript 的超集。简单来说就是&#xff1a;JS 有的 TS 都有。JS写的代码在TS…