【Maven】008-Maven 私服搭建与使用

【Maven】008-Maven 私服搭建与使用

文章目录

  • 【Maven】008-Maven 私服搭建与使用
  • 一、概述
    • 1、简介
    • 2、建立私服后依赖查找和下载逻辑
      • 第一步:请求本地仓库
      • 第二步:请求 Maven 私服
      • 第三步:请求外部远程仓库(远程中央仓库等)
      • 参考图
    • 3、Maven 私服的优势
    • 4、Maven 私服常用的产品
  • 二、Nexus 下载、安装、初始设置
    • 1、下载
      • 地址
      • 目标
    • 2、安装
      • 第一步:解压到一个目录
      • 第二步:启动
      • 第三步:访问 `http://localhost:8081/`
    • 3、初始设置
      • 登录
      • 根据提示设置新密码
      • 禁用匿名登录
      • 初始化完成后
  • 三、Nexus 上的仓库
    • 1、仓库
    • 2、仓库类型&说明
    • 3、仓库名称&说明
    • 4、初始状态仓库内为空
  • 四、通过 Nexus 下载 jar 包
    • 1、将中央仓库地址设置为阿里云镜像地址
      • 第一步:选择要修改的仓库
      • 第二步:修改地址为阿里云镜像地址
      • 第三步:保存配置
    • 2、将本机 Maven 配置的阿里云镜像地址改成自己的私服地址
      • 第一步:拷贝自己的私服仓库地址
      • 第二步:修改本机 Maven 配置的阿里云镜像地址
      • 第三步:添加访问用户名密码
    • 3、通过 Nexus 下载 jar 包
      • 第一步:修改本机 Maven 仓库地址
      • 第二步:在 Maven 工程下执行 Maven 命令
      • 第三步:查看私服仓库
  • 五、将 jar 包部署到 Nexus
    • 1、Maven 工程中配置
    • 2、执行部署命令
      • 执行日志
      • 私服
  • 六、引用别人部署的 jar 包
    • 1、Maven 工程中配置
    • 2、打包日志

一、概述

1、简介

Maven私服(Repository Manager)是一个用于管理和分发构建制品(如JAR、WAR、POM文件等)的服务器。它允许团队在本地搭建一个中央存储库,用于保存和分享项目构建所需的依赖项。一些常见的Maven私服产品包括 Nexus、Artifactory 和 Apache Archiva 。

2、建立私服后依赖查找和下载逻辑

第一步:请求本地仓库

  • 当用户需要某个构件时,首先会检查本地仓库是否已经存在所需构件。
  • 如果本地仓库中已经有所需构件,系统将直接从本地仓库获取,无需进行远程请求。

第二步:请求 Maven 私服

  • 如果本地仓库中不存在所需构件,用户的请求将转向 Maven 私服。
  • Maven 私服会检查自身的仓库,如果存在所需构件,将其下载到本地仓库,并返回给用户。

第三步:请求外部远程仓库(远程中央仓库等)

  • 如果 Maven 私服也没有所需构件,系统将尝试从外部的远程仓库(通常是中央仓库)中获取。
  • 如果外部远程仓库存在所需构件,Maven 私服会将该构件下载并缓存到自身的仓库中,然后将构件返回给用户。
  • 如果外部远程仓库中也不存在所需构件,Maven 将报错,指示找不到所需的依赖项。

参考图

image-20231021164631791

3、Maven 私服的优势

  1. 加速构建过程: Maven 私服允许团队在本地搭建一个中央存储库,使得构建时可以优先从局域网内的私服获取依赖项,从而减少对外部远程仓库的依赖,加速构建过程。
  2. 降低对外部网络的依赖性: 私服允许团队在没有互联网连接或网络较差的情况下进行构建。依赖项的本地缓存和私服的存在减少了对外部网络的依赖性,提高了项目的可靠性。
  3. 统一依赖管理: 通过私服,团队可以统一管理和控制项目所需的依赖项版本,确保整个团队使用相同的构建制品,降低了版本冲突和不一致性的可能性。
  4. 安全性: 私服可以提供访问控制和安全认证机制,限制对仓库的访问,确保只有授权的人员能够发布和获取构建制品。这有助于保护项目的代码和依赖项的安全性。
  5. 本地镜像和缓存: 私服可以缓存外部远程仓库中的构建制品,降低了从外部仓库获取依赖项的延迟。此外,私服还可以配置为本地镜像,提供更快速的下载。
  6. 离线部署: Maven 私服支持离线部署,使得在没有互联网连接的环境中也能够构建和部署项目,适用于一些安全要求较高或隔离网络的场景。

4、Maven 私服常用的产品

  1. Nexus(当前最流行、使用最广泛):
    • Nexus 是 Sonatype 公司推出的一款流行的 Maven 私服产品。
    • 提供强大的仓库管理和安全性功能。
    • 支持多种仓库格式,包括Maven、npm、Docker等。
  2. Artifactory:
    • Artifactory是JFrog公司开发的另一款领先的构建制品仓库管理工具。
    • 支持各种包括 Maven、Gradle、npm 等的构建工具。
    • 具有高度可伸缩性和灵活的部署选项。
  3. Apache Archiva:
    • Apache Archiva 是由 Apache 软件基金会提供的开源 Maven 私服工具。
    • 提供基本的仓库管理功能,适用于小型项目或对简单配置有需求的团队。

二、Nexus 下载、安装、初始设置

1、下载

地址

https://help.sonatype.com/repomanager3/product-information/download

目标

image-20240114091800081

2、安装

第一步:解压到一个目录

image-20240114093016614

第二步:启动

使用管理员身份打开 CMD ,切换到 bin 目录。

命令:

  • 安装:nexus.exe /install bm-maven
  • 启动:nexus.exe /start bm-maven
  • 停止:nexus.exe /stop bm-maven
  • 卸载:nexus.exe /uninstall bm-maven

image-20240114094115157

第三步:访问 http://localhost:8081/

image-20240114094443971

3、初始设置

登录

用户名:admin

密码:(在 Nexus\sonatype-work\nexus3\admin.password )

image-20240114094610809

根据提示设置新密码

image-20240114094842314

禁用匿名登录

image-20240114094937996

初始化完成后

image-20240114095117223

三、Nexus 上的仓库

1、仓库

image-20240114095359248

2、仓库类型&说明

仓库类型说明
proxy某个远程仓库的代理
group存放:通过 Nexus 获取的第三方 jar 包
hosted存放:本团队其他开发人员部署到 Nexus 的 jar 包

3、仓库名称&说明

仓库名称说明
maven-centralNexus 对 Maven 中央仓库的代理
maven-publicNexus 默认创建,供开发人员下载使用的组仓库
maven-releasesNexus 默认创建,供开发人员部署自己 jar 包的宿主仓库 要求 releases 版本
maven-snapshotsNexus 默认创建,供开发人员部署自己 jar 包的宿主仓库 要求 snapshots 版本

4、初始状态仓库内为空

image-20240114095559491

四、通过 Nexus 下载 jar 包

1、将中央仓库地址设置为阿里云镜像地址

为了加快国内下载速度!

第一步:选择要修改的仓库

image-20240114095957773

第二步:修改地址为阿里云镜像地址

http://maven.aliyun.com/nexus/content/groups/public/

image-20240114100154731

第三步:保存配置

image-20240114100248443

2、将本机 Maven 配置的阿里云镜像地址改成自己的私服地址

第一步:拷贝自己的私服仓库地址

image-20240114100726978

第二步:修改本机 Maven 配置的阿里云镜像地址

image-20240114101058232

第三步:添加访问用户名密码

我们设置了禁止匿名访问!

这里需要格外注意:server 标签内的 id 标签值必须和 mirror 标签中的 id 值一样。

image-20240114132247729

3、通过 Nexus 下载 jar 包

第一步:修改本机 Maven 仓库地址

因为原本的仓库里面可能已经有很多内容了,为了直观,新建一个本地空仓库(一个空文件夹),让 Maven 直接向私服获取依赖!

image-20240114101533142

第二步:在 Maven 工程下执行 Maven 命令

mvn clean compile

部分下载过程日志:

......
Downloaded from zibo-nexus-maven: http://localhost:8081/repository/maven-central/org/codehaus/plexus/plexus-container-default/1.5.5/plexus-container-default-1.5.5.jar (217 kB at 42 kB/s)
Downloading from zibo-nexus-maven: http://localhost:8081/repository/maven-central/junit/junit/3.8.2/junit-3.8.2.jar
Downloaded from zibo-nexus-maven: http://localhost:8081/repository/maven-central/log4j/log4j/1.2.12/log4j-1.2.12.jar (358 kB at 63 kB/s)
Downloaded from zibo-nexus-maven: http://localhost:8081/repository/maven-central/commons-logging/commons-logging-api/1.1/commons-logging-api-1.1.jar (45 kB at 7.9 kB/s)
Downloaded from zibo-nexus-maven: http://localhost:8081/repository/maven-central/org/apache/xbean/xbean-reflect/3.4/xbean-reflect-3.4.jar (134 kB at 23 kB/s)
Downloaded from zibo-nexus-maven: http://localhost:8081/repository/maven-central/junit/junit/3.8.2/junit-3.8.2.jar (121 kB at 21 kB/s)
Downloaded from zibo-nexus-maven: http://localhost:8081/repository/maven-central/com/google/collections/google-collections/1.0/google-collections-1.0.jar (640 kB at 89 kB/s)
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\MyFile\IDEAProjects\mvn-demo\demo1\target\classes
[INFO]
[INFO] ---------------------------< com.zibo:demo2 >---------------------------
[INFO] Building demo2 1.0-SNAPSHOT                                        [3/3]
[INFO]   from demo2\pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ demo2 ---
[INFO] Deleting D:\MyFile\IDEAProjects\mvn-demo\demo2\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ demo2 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ demo2 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\MyFile\IDEAProjects\mvn-demo\demo2\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for mvn-demo 1.0-SNAPSHOT:
[INFO]
[INFO] mvn-demo ........................................... SUCCESS [  8.613 s]
[INFO] demo1 .............................................. SUCCESS [01:22 min]
[INFO] demo2 .............................................. SUCCESS [  0.079 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:31 min
[INFO] Finished at: 2024-01-14T13:26:44+08:00
[INFO] ------------------------------------------------------------------------

第三步:查看私服仓库

image-20240114132842488

五、将 jar 包部署到 Nexus

如出现问题,请调整下面配置。

1、Maven 工程中配置

注意:这里 repository 和 snapshotRepository 的 id 标签必须和 settings.xml 中指定的 mirror 标签的 id 属性一致。

<distributionManagement>
    <!-- 部署正式版本(Release):mvn clean deploy -->
    <repository>
        <id>zibo-nexus-maven</id>
        <name>zibo nexus maven releases</name>
        <url>http://localhost:8081/repository/maven-releases/</url>
    </repository>
    <!-- 部署快照版本(Snapshot):mvn clean deploy -DrepositoryId=zibo-nexus-maven -->
    <snapshotRepository>
        <id>zibo-nexus-maven</id>
        <name>zibo nexus maven</name>
        <url>http://localhost:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

2、执行部署命令

mvn deploy

执行日志

image-20240114134727474

私服

image-20240114134906341

六、引用别人部署的 jar 包

1、Maven 工程中配置

<dependencies>
    <dependency>
        <groupId>com.zibo</groupId>
        <artifactId>demo1</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

<repositories>
    <repository>
        <id>zibo-nexus-maven</id>
        <name>zibo nexus maven</name>
        <url>http://localhost:8081/repository/maven-releases/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>
</repositories>

2、打包日志

image-20240114140455255

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot教程(三) | Spring Boot初体验

SpringBoot教程(三) | Spring Boot初体验 上篇文章我们创建了SpringBoot 项目&#xff0c;并且进行了简单的启动。整个项目了里其实我们就动了两个文件&#xff0c;一个是pom.xml负责管理springboot的相关依赖&#xff0c;一个是springBoot的启动类。 pom文件中通过starter的…

Linux环境变量配置全攻略

热门IT课程【视频教程】-华为/思科/红帽/oraclehttps://xmws-it.blog.csdn.net/article/details/134398330?spm1001.2014.3001.5502 Linux环境变量配置 在自定义安装软件的时候&#xff0c;经常需要配置环境变量&#xff0c;下面列举出各种对环境变量的配置方法。 下面所有例…

HTML-鼠标悬浮文案效果

文章目录 前言一、 hover属性实现二、title属性 简单实现总结 前言 有时候&#xff0c;我们浏览网站时&#xff0c;鼠标停留在某处后鼠标会提示一些文案。 一、 hover属性实现 HTML 中可以使用 CSS 来实现鼠标悬浮文案效果。 首先&#xff0c;在 HTML 文件中添加需要显示悬浮…

VS打开报错 未能正确加载 Microsoft Wswalstudio.editorImplementation.editorPackage”

VS 打开的时候报错&#xff1a; 未能正确加载 Microsoft Wswalstudio.editorImplementation.editorPackage” 此间题可能是由配查更改或安装另一个扩展导致的&#xff0c;可以通过查看文件 C:\Users\Administrator\AppData\Roaming\Microsoft\VisualStudio\11.0\ActivityLog.x…

AI客服发展现状与展望:期待技术进步带来更优质的服务体验

近年来&#xff0c;随着人工智能技术的飞速发展&#xff0c;越来越多的企业开始采用AI客服&#xff0c;以提高效率、降低成本。然而&#xff0c;一些用户反映AI客服存在回答不准确、难以理解个性化问题等问题&#xff0c;引发了对智能客服发展现状的关注。 在北京市民邹女士的…

js的防抖与节流

目录 认识防抖与节流防抖节流 手写防抖函数绑定this与参数取消功能立即执行获取返回值最终版 手写节流函数 认识防抖与节流 在JavaScript中&#xff0c;大量操作都会触发事件&#xff0c;这些事件又会被添加到事件队列中进行排队处理 某些事件如果频繁触发的话会对浏览器的性能…

服务器变矿机,该如何应对?

开始 恶意的挖矿程序会导致服务器cpu的异常占用&#xff0c;很让人讨厌。起初&#xff0c;我只是使用top命令显示出占用cpu不正常的进程&#xff0c;发现其中一个进程占用了百分之九十九点几&#xff0c;然后通过kill -9 <PID>命令干掉它。但总是过不了几天&#xff0c;…

Windows系统字体尺寸学习

调用GetTextMetrics来获得字体尺寸信息, 函数返回设备描述表中当前选定的字体信息&#xff1b; 返回值到TEXTMETRIC类型的结构中&#xff1b; 返回字段值的单位取决于当前设备描述表映射方式&#xff1b;默认映射方式是MM_TEXT&#xff0c;值的单位是像素&#xff1b; 前7个字…

【MATLAB源码-第113期】基于matlab的孔雀优化算法(POA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 POA&#xff08;孔雀优化算法&#xff09;是一种基于孔雀羽毛开屏行为启发的优化算法。这种算法模仿孔雀通过展开其色彩斑斓的尾羽来吸引雌性的自然行为。在算法中&#xff0c;每个孔雀代表一个潜在的解决方案&#xff0c;而…

CSS3弹性盒布局详解

CSS3的弹性盒布局 简介 弹性盒&#xff08; Flexible Box 或 Flexbox&#xff09; 布局是CSS3提供的一种新的布局模式&#xff0c;是一种当页面需要适应不同的屏幕大小及设备类型时&#xff0c;确保元素拥有恰当行为的一种布局方式。 弹性盒的结构: 从图中所知&#xff0c…

K8s(一)Pod资源——Pod介绍、创建Pod、Pod简单资源配额

目录 Pod概述 pod网络 pod存储 pod和容器对比 创建pod的方式 pod运行方式分类 Pod的创建 Pod的创建过程 通过kubectl run来创建pod 通过yaml文件创建&#xff0c;yaml文件简单写法 Pod简单操作 Pod的标签labels Pod的资源配额resource 测试 Pod概述 Kubernetes …

嵌入式学习-网络编程-Day4

思维导图 广播通信模型 #include <myhead.h> int main(int argc, char const *argv[]) {int rfd socket(AF_INET,SOCK_DGRAM,0);if(rfd-1){perror("socket error");return -1;}//填充地址信息结构体struct sockaddr_in rin;rin.sin_familyAF_INET;rin.sin_por…

[ceph] ceph应用

一、资源池 Pool 管理 #创建一个 Pool 资源池&#xff0c;其名字为 mypool&#xff0c;PGs 数量设置为 64&#xff0c;设置 PGs 的同时还需要设置 PGP&#xff08;通常PGs和PGP的值是相同的&#xff09;&#xff1a; PG (Placement Group)&#xff0c;pg 是一个虚拟的概念&…

基于变换域的模版匹配

模板匹配原理 图像的空间域与其他域之间的变换&#xff0c;如傅里叶变换&#xff0c;小波变换&#xff0c;轮廓波变换&#xff0c;剪切波变换等&#xff0c;实际上是图像在其他坐标领域中的表现。在空间域中&#xff0c;图像的信息是像素值和坐标位置&#xff1b;在其他域中&a…

交通流量预测HSTGCNT:Hierarchical Spatio–Temporal Graph Convolutional

Hierarchical Spatio–Temporal Graph Convolutional Networks and Transformer Network for Traffic Flow Forecasting 交通流预测的层次时空图卷积网络和Transformer网络 Abstract 图卷积网络&#xff08;GCN&#xff09;具有图形化描述道路网络不规则拓扑结构的能力&#…

【C语言】数据结构——排序三(归并与计数排序)

&#x1f497;个人主页&#x1f497; ⭐个人专栏——数据结构学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读&#xff1a;1. 归并排序1.1 基本思想1.2 递归实现1.3 非递归实现 2. 计数排序2.1 基本思想2.2 代码实现 导读&#x…

如何用Python进行数据分析(保姆级教程)

有小伙伴在学Python新手教程的时候说学Python比较复杂的地方就是资料太多了&#xff0c;比较复杂。 很多网上的资料都是从语法教起的&#xff0c;花了很多时间还是云里雾里&#xff0c;摸不清方向。今天就给大家来捋一捋思路&#xff01;帮助大家提高学习效率&#xff01; Pyt…

夜神安装Magisk及Delta(狐狸面具)教程

Magisk和LSPosed、EdXPosed下载 Magisk框架下载与安装教程 - 多开鸭Magisk及LSPosed在模拟器安装的详细视频教程 推荐先看一遍教程 视频教程 雷电模拟器版本教程&#xff1a;https://www.bilibili.com/video/BV1kv4y127af 夜神模拟https://www.duokaiya.com/magisk.html 夜神模…

JS遍历对象的方法及特点

1、定义一个对象 let obj {name: Tom,age: 20,sex: 男,};obj.weight 70kg;// obj的原型上定义属性Object.prototype.height 180cm;Object.prototype.major function() {console.log(专业&#xff1a;计算机应用技术);};console.log(obj, obj); 控制台输出的obj中&#xff…

C++make_pair,你真的懂了吗?

其实写这篇文章我还是很忐忑的&#xff0c;因为用C也写了快一年了&#xff0c;平时代码量个人认为还可以&#xff0c;但是最近两天频繁犯错&#xff0c;下面先说说我写的错误吧&#xff01; 我们都知道make_pair返回的是一个pair类型的函数&#xff0c;而pair这个键值对它又是…