【Maven】Nexus私服

news2024/12/5 3:43:04

6. Maven的私服

6.1 什么是私服

Maven 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库)。一些无法从外部仓库下载到的构件,如项目组其他人员开发的 jar 包,也能从本地上传到私服供其他人使用。

建立了 Maven 私服后,当局域网内的用户需要某个构件时,会先请求本地仓库,若本地仓库不存在所需构件,则请求 Maven 私服,将所需构件下载到本地仓库,若私服中不存在所需构件,再去请求外部的远程仓库,将所需构件下载并缓存到 Maven 私服,若外部远程仓库不存在所需构件,则 Maven 直接报错。

6.2 Maven仓库管理器Nexus

6.2.1 什么是Nexus

Nexus 是 Sonatype 公司发布的一款仓库(Repository)管理软件,常用来搭建 Maven 私服,所以也有人将 Nexus 称为"Maven 仓库管理器"。 Sonatype Nexus 是当前最流行,使用最广泛的 Maven 仓库管理器。Nexus 分为开源版和专业版,其中开源版足以满足大部分 Maven 用户的需求。

6.2.2 Nexus仓库的类型

Nexus 默认内置了很多仓库,这些仓库可以划分为 3 种类型,每种类型的仓库用于存放特定的 jar 包,具体说明如下:

  • hosted:宿主仓库。部署自己的 jar 包到这个类型的仓库中,包括 Releases 和 Snapshots 两部分,Releases 为公司内部发行版本仓库,Snapshots 为公司内部测试版本仓库。
  • proxy:代理仓库,maven-central。用于代理远程的公共仓库,如 Maven 中央仓库。用户连接私服,私服自动去中央仓库下载 jar 包或者插件。
  • group:仓库组,maven-public。用来合并多个 hosted/proxy 仓库,通常用于配置自己的 Maven 连接仓库组。当我们下载 jar 包时,从仓库组中的每个仓库找一遍,找到后下载。请添加图片描述

6.2.3 Nexus实战

6.2.3.1 运行Nexus控制台

1、以管理员身份打开 cmd,进入到 nexus 安装目录的 bin 目录下,执行命令nexus /run nexus,启动 Nexus 控制台。

启动成功:
请添加图片描述
2、访问 Nexus 工作台:http://localhost:8081/
请添加图片描述
3、登录 Nexus 工作台

输入账号(默认为 admin),密码在提示的文件中(xxxxxxxxxxxx)。在登录过程中,需要设置"使用账号和密码登录",即选择下面的选项,以提高安全性。
请添加图片描述

6.2.3.2 在私服上创建仓库

1、控制台创建仓库

在 Nexus 私服上创建 2 个仓库,myphoenix-snapshot 和 myphoenix-release,分别作为内侧仓库和发布仓库
请添加图片描述
选择 maven2(hosted):
请添加图片描述
取名为 myphoenix-release,类型为 Release,创建:
请添加图片描述
2、将新建仓库添加到仓库组

创建好 myphoenix-release 仓库后,我们可以将自己打包的 jar 包上传到 Nexus 私服。但是,我们还想让其他开发人员能够在私服上下载我们上传的 jar。这时,需要将此仓库添加到仓库组 maven-public 仓库中。
请添加图片描述
以同样的方式在 Nexus 私服上创建个人 snapshot 测试库 myphoenix-snapshot。然后,将 myphoenix-snapshot 添加到仓库组 maven-public 中去。

此时,就将个人的测试仓库和发行仓库添加到 maven-public 中了。
请添加图片描述
在后面的开发工作中,我们可以上传 jar 包到 Nexus 私服,其他开发人员可以从私服下载我们上传的 jar 包了。

3、修改私服配置的远程仓库为阿里镜像仓库

将 maven-central 中的中央仓库地址修改为阿里云远程仓库的地址。

可以看到,maven-central 默认代理的是 Maven 的中央仓库:
请添加图片描述
为了加快访问速度,我们将其修改为阿里的远程仓库:

4、修改本地机器的 Maven 配置

修改 Maven 工具访问私服。

在之前的配置中,Maven 工具直接配置了阿里的远程仓库,现在,我们将其配置为私服的地址,让 Maven 通过私服下载 jar 包。修改 settings.xml 文件:

  • 修改本地仓库,创建一个新的本地仓库,方便观察到从私服下载 jar 包。
  • 修改远程仓库地址为 Nexus 私服的地址。

设置访问 Nexus 私服的用户名和密码

  </servers>
    <server>
      <id>myphoenix-nexus</id>
      <username>admin</username>
      <password>xxxxxxxxxxxx</password>
    </server>
  </servers>

删除原来配置的阿里远程仓库,重新配置 Nexus 私服地址,用于下载 jar 包

  </mirrors>
        <mirror>  
             <id>myphoenix-nexus</id>
             <mirrorOf>central</mirrorOf>
             <name>mynexus</name>  
             <url>http://localhost:8081/repository/maven-public/</url>          
        </mirror>
  </mirrors>

打开项目,发现 Maven 报错,jar 包也没了:
请添加图片描述
刷新 Maven 依赖,发现 Nexus 控制台的 maven-public 中有了 jar 包:
请添加图片描述

6.2.3.3 部署jar包至私服&从私服下载jar包

上传本地 jar 包到 Nexus 私服:

1、创建 maven_nexus 模块。

2、在 maven_nexus 模块中创建一个类 Common,在 Common 类中定义一个 sayHi 方法,模拟开发的功能。

3、在 maven_nexus 的 pom.xml 文件中配置部署参数。

4、在 maven_nexus 的生命周期中,执行 deploy,分别将 Snapshot 和 Release 版本部署到私服上。

  • version 为 1.0-SNAPSHOT,上传至内侧仓库。
  • version 为 1.0.0,上传至发布仓库。

5、创建 maven_nexus_download 模块,模拟同组的其他开发人员,在该模块中编写测试类,尝试引入 maven_nexus 模块依赖。

pom.xml 配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.myphoenix</groupId>
    <artifactId>maven_nexus</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!--为项目进行部署(上传至私服)参数配置,以什么用户名和密码,上传到哪个库-->
    <distributionManagement>
        <!--上传至发布仓库-->
        <repository>
            <id>myphoenix-nexus</id>
            <url>http://localhost:8081/repository/myphoenix-release/</url>
        </repository>
        
        <!--上传至内测仓库-->
        <snapshotRepository>
            <id>myphoenix-nexus</id>
            <url>http://localhost:8081/repository/myphoenix-snapshot/</url>
        </snapshotRepository>
    </distributionManagement>

</project>

现将内侧版本上传至内侧仓库:
请添加图片描述
查看控制台信息:

C:\Softwares\Developer_Kits\JDK\jdk1.8.0_131\bin\ ......
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< cn.myphoenix:maven_nexus >----------------------
[INFO] Building maven_nexus 1.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven_nexus ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maven_nexus ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to C:\Coding_Gallery\Intellij_IDEA_Workspace\learning_maven\maven_nexus\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ maven_nexus ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Coding_Gallery\Intellij_IDEA_Workspace\learning_maven\maven_nexus\src\test\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ maven_nexus ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ maven_nexus ---
[INFO] No tests to run.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ maven_nexus ---
[INFO] Building jar: C:\Coding_Gallery\Intellij_IDEA_Workspace\learning_maven\maven_nexus\target\maven_nexus-1.0-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ maven_nexus ---
[INFO] Installing C:\Coding_Gallery\Intellij_IDEA_Workspace\learning_maven\maven_nexus\target\maven_nexus-1.0-SNAPSHOT.jar to C:\Softwares\Developer_Kits\apache-maven-3.8.8\repository\cn\myphoenix\maven_nexus\1.0-SNAPSHOT\maven_nexus-1.0-SNAPSHOT.jar
[INFO] Installing C:\Coding_Gallery\Intellij_IDEA_Workspace\learning_maven\maven_nexus\pom.xml to C:\Softwares\Developer_Kits\apache-maven-3.8.8\repository\cn\myphoenix\maven_nexus\1.0-SNAPSHOT\maven_nexus-1.0-SNAPSHOT.pom
[INFO] 
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ maven_nexus ---
Downloading from myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/1.0-SNAPSHOT/maven-metadata.xml
Uploading to myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/1.0-SNAPSHOT/maven_nexus-1.0-20241128.071034-1.jar
Uploaded to myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/1.0-SNAPSHOT/maven_nexus-1.0-20241128.071034-1.jar (2.5 kB at 16 kB/s)
Uploading to myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/1.0-SNAPSHOT/maven_nexus-1.0-20241128.071034-1.pom
Uploaded to myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/1.0-SNAPSHOT/maven_nexus-1.0-20241128.071034-1.pom (1.2 kB at 8.2 kB/s)
Downloading from myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/maven-metadata.xml
Uploading to myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/1.0-SNAPSHOT/maven-metadata.xml
Uploaded to myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/1.0-SNAPSHOT/maven-metadata.xml (767 B at 7.8 kB/s)
Uploading to myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/maven-metadata.xml
Uploaded to myphoenix-nexus: http://localhost:8081/repository/myphoenix-snapshot/cn/myphoenix/maven_nexus/maven-metadata.xml (281 B at 3.8 kB/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.498 s
[INFO] Finished at: 2024-11-28T15:10:38+08:00
[INFO] ------------------------------------------------------------------------

Process finished with exit code 0

查看私服上的内侧仓库 myphoenix-snapshot,发现部署成功:
请添加图片描述
将 pom.xml 文件中的 version 修改为 1.0.0,以相同的方式将其部署到私服的发布仓库 myphoenix-release 中。
请添加图片描述
在 maven_nexus_download 模块中,编写测试类,尝试引入发布版本的 maven_nexus-1.0.0.jar。
请添加图片描述
测试类:

public class CommonTest {

    public void testSayHi() {
        Common common = new Common();
        common.sayHi();
    }
}

测试通过:
请添加图片描述

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

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

相关文章

Gradle vs. Maven: 到底哪个更适合java 项目?

ApiHug ApiHug - API Design & Develop New Paradigm.ApiHug - API Design & Develop New Paradigm.https://apihug.com/ 首先 ApiHug 整个工具链是基于 gradle 构建,包括项目模版&#xff0c; 插件&#xff1b; 说到 Java 项目管理&#xff0c;有两个巨头脱颖而出&a…

Dubbo的集群容错策略有哪些?它们的工作原理是什么?

大家好&#xff0c;我是锋哥。今天分享关于【Dubbo的集群容错策略有哪些&#xff1f;它们的工作原理是什么&#xff1f;】面试题。希望对大家有帮助&#xff1b; Dubbo的集群容错策略有哪些&#xff1f;它们的工作原理是什么&#xff1f; 1000道 互联网大厂Java工程师 精选面试…

分治的思想(力扣965、力扣144、牛客KY11)

引言 分治思想是将问题分解为更小子问题&#xff0c;分别解决后再合并结果。二叉树中常用此思想&#xff0c;因其结构递归&#xff0c;易分解为左右子树问题&#xff0c;递归解决后合并结果。 这篇文章会讲解用分治的思想去解决二叉树的一些题目&#xff0c;顺便会强调在做二…

中国电信张宝玉:城市数据基础设施建设运营探索与实践

11月28日&#xff0c;2024新型智慧城市发展创新大会在山东青岛召开&#xff0c;中国电信数字政府研究院院长张宝玉在大会发表主旨演讲《城市数据基础设施运营探索与实践》。报告内容包括城市数据基础设施的概述、各地典型做法及发展趋势建议三个方面展开。 篇幅限制&#xff0…

【论文阅读】Federated learning backdoor attack detection with persistence diagram

目的&#xff1a;检测联邦学习环境下&#xff0c;上传上来的模型是不是恶意的。 1、将一个模型转换为|L|个PD,&#xff08;其中|L|为层数&#xff09; 如何将每一层转换成一个PD&#xff1f; 为了评估第&#x1d457;层的激活值&#xff0c;我们需要&#x1d450;个输入来获…

深度学习案例:ResNet50模型+SE-Net

本文为为&#x1f517;365天深度学习训练营内部文章 原作者&#xff1a;K同学啊 一 回顾ResNet模型 ResNet&#xff0c;即残差网络&#xff0c;是由微软研究院的Kaiming He及其合作者于2015年提出的一种深度卷积神经网络架构。该网络架构的核心创新在于引入了“残差连接”&…

js高级-ajax封装和跨域

ajax简介及相关知识 原生ajax AJAX 简介 AJAX 全称为 Asynchronous JavaScript And XML&#xff0c;就是异步的 JS 和 XML。 通过 AJAX 可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无刷新获取数据。 按需请求&#xff0c;可以提高网站的性能 AJ…

【AI】Sklearn

长期更新&#xff0c;建议关注、收藏、点赞。 友情链接&#xff1a; AI中的数学_线代微积分概率论最优化 Python numpy_pandas_matplotlib_spicy 建议路线&#xff1a;机器学习->深度学习->强化学习 目录 预处理模型选择分类实例&#xff1a; 二分类比赛 网格搜索实例&…

如何让控件始终处于父容器的居中位置(父容器可任意改变大小)

前言&#xff1a; 大家好&#xff0c;我是上位机马工&#xff0c;硕士毕业4年年入40万&#xff0c;目前在一家自动化公司担任软件经理&#xff0c;从事C#上位机软件开发8年以上&#xff01;我们在C#开发winform程序的时候&#xff0c;有时候需要将一个控件居中显示&#xff0c…

Python 调用 Umi-OCR API 批量识别图片/PDF文档数据

目录 一、需求分析 二、方案设计&#xff08;概要/详细&#xff09; 三、技术选型 四、OCR 测试 Demo 五、批量文件识别完整代码实现 六、总结 一、需求分析 市场部同事进行采购或给客户报价时&#xff0c;往往基于过往采购合同数据&#xff0c;给出现在采购或报价的金额…

【QT】背景,安装和介绍

TOC 目录 背景 GUI技术 QT的安装 使用流程 QT程序介绍 main.cpp​编辑 Wiget.h Widget.cpp form file .pro文件 临时文件 C作为一门比较古老的语言&#xff0c;在人们的认知里始终是以底层&#xff0c;复杂和高性能著称&#xff0c;所以在很多高性能需求的场景之下…

Linux内核编译流程(Ubuntu24.04+Linux Kernel 6.8.12)

万恶的拯救者&#xff0c;使用Ubuntu没有声音&#xff0c;必须要自己修改一下Linux内核中的相关驱动逻辑才可以&#xff0c;所以被迫学习怎么修改内核&编译内核&#xff0c;记录如下 准备工作 下载Linux源码&#xff1a;在Linux发布页下载并使用gpg签名验证 即&#xff1a…

【阅读笔记】Android广播的处理流程

关于Android的解析&#xff0c;有很多优质内容&#xff0c;看了后记录一下阅读笔记&#xff0c;也是一种有意义的事情&#xff0c; 今天就看看“那个写代码的”这位大佬关于广播的梳理&#xff0c; https://blog.csdn.net/a572423926/category_11509429.html https://blog.c…

linux下Qt程序部署教程

文章目录 [toc]1、概述2、静态编译安装Qt1.1 安装依赖1.2 静态编译1.3 报错1.4 添加环境变量1.5 下载安装QtCreator 3、配置linuxdeployqt环境1.1 在线安装依赖1.2 使用linuxdeployqt提供的程序1.3 编译安装linuxdeployqt 4、使用linuxdeployqt打包依赖1.1 linuxdeployqt使用选…

【PHP】部署和发布PHP网站到IIS服务器

欢迎来到《小5讲堂》 这是《PHP》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 前言安装PHP稳定版本线程安全版解压使用 PHP配置配置文件扩展文件路径…

视觉经典神经网络学习01_CNN(1)

一、概述 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种专门用于处理具有网格状结构数据的深度学习模型。最初&#xff0c;CNN主要应用于计算机视觉任务&#xff0c;但它的成功启发了在其他领域应用&#xff0c;如自然语言处理等。…

【golang】单元测试,以及出现undefined时的解决方案

单元测试 要对某一方法进行测试时&#xff0c;例如如下这一简单减法函数&#xff0c;选中函数名后右键->转到->测试 1&#xff09;Empty test file 就是一个空文件&#xff0c;我们可以自己写测试的逻辑 但是直接点绿色箭头运行会出问题&#xff1a; 找不到包。我们要在…

DVWA靶场通关——DOM型XSS漏洞

一、DOM型XSS攻击概述 DOM型XSS&#xff08;DOM-based Cross-Site Scripting&#xff0c;DOM XSS&#xff09;是一种跨站脚本攻击&#xff08;XSS&#xff09;的变种&#xff0c;它与传统的反射型XSS&#xff08;Reflected XSS&#xff09;或存储型XSS&#xff08;Stored XSS&a…

【Unity 动画】设置跟运动(Apply Root)模型跟着动画产生位移

一、导入的动画本身必须有跟随动画产生位移或者旋转的效果 二、导入Unity后 在Unity中&#xff0c;根运动&#xff08;Root Motion&#xff09;是指动画中角色根节点的移动和旋转。根节点通常是角色的根骨骼&#xff08;Root Bone&#xff09;&#xff0c;它决定了角色的整体…

Spring AI 框架介绍

Spring AI是一个面向人工智能工程的应用框架。它的目标是将Spring生态系统的设计原则&#xff08;如可移植性和模块化设计&#xff09;应用于AI领域&#xff0c;并推广使用pojo作为AI领域应用的构建模块。 概述 Spring AI 现在(2024/12)已经支持语言&#xff0c;图像&#xf…