maven私服搭建详细教程

1、为什么需要私服

       如果在公司中多个项目模块中的的公共类用的都是一样的,那么不可能将这些一样的代码写两遍。所以将其中一个项目中的代码打包成私服,然后在另外一个模块中去进行引用。

        除此之外,如果大公司中开发人员较多,大家同时去远程仓库将依赖下载到本地,那么对公司的带宽会造成很大的压力。很有可能会造成其他的问题。所以可以在公司的局域网内部去搭建一台服务器,开发人员所有的依赖去这台服务器中去访问,如果该台服务器中也没有该依赖,那么该服务器就去远程仓库查找,然后下载到该服务器,最后在返给开发者。

 优点:

1、 加速下载速度

2 、 加速带宽,加速项目构建速度

3、 方便公共使用

4、 提高maven稳定性,中央仓库需要连外网才能访问,私服只需要连内网就可以访问。

maven仓库管理软件:

Apache基金会的archiva:Archiva – The Build Artifact Repository Manager

JFrog的Artifactory:Artifactory – Universal Artifact Repository Manager – JFrog

Sonatype的Nexus:My Sonatype | Customer Platform

2、Nexus私服 

2.1 Nexus下载及登录

注意:nexus是java开发,所以需要j保证电脑安装了java环境。

下载地址:Download

 解压后文件夹后进入bin目录

直接cmd运行:

D:\App\nexus-3.55.0-01-win64\nexus-3.55.0-01\bin>nexus.exe /run

浏览器打开如下:http://localhost:8081/

右上角登录:

用户名:admin(默认)

密码:第一次启动时生成,(在/sonatype-work/nexus3/admin.password 文件中)

登录之后可以进行一些修改密码等指引操作。

 2.2 maven仓库

maven仓库既可以从中央仓库拉取依赖,也可以将本地依赖直接发到nexus中,那么就少不了maven中的仓库

2.2.1 代理仓库

代理仓库主要是让用户通过代理仓库访问外部第三方仓库,如maven中央仓库、阿里的maven仓库。代理仓库会从被代理的仓库(maven中央仓库、阿里的maven仓库)中下载依赖,缓存在代理仓库中以便让maven用户使用。

创建代理仓库过程:

选择 Create repository

选择maven2(proxy)

输入远程仓库信息:

第一个红框:仓库名称

第二个红框:Release(表示从仓库中下载稳定的构建)

第三个红框:仓库地址

然后点击创建,完成后如下:

 2.2.2 宿主仓库

宿主仓库主要是供给自己使用:

1、将私有的一些构建通过网页的方式上传到宿主仓库中供大家使用。

2、将自己开发好的一些构建发布到nexus的宿主仓库中供大家使用

2.2.3 仓库组

仓库组既然是“组”的概念,说明它里面可以包含多个仓库。

因为maven用户可以从代理仓库和宿主仓库中下载构建至本地仓库,为了方便从代理仓库和宿主仓库下载构建,maven提供了仓库组。

仓库组可以包含多个宿主仓库和代理仓库,maven用户访问一个仓库组就可以访问该仓库下的所有仓库。

仓库组中的多个仓库是有顺序的,当maven用户从仓库组中下载构建时,会按顺序在仓库组中查找组件,查到了就返回给本地仓库,所以一般将速度快的放前面。

仓库组内部实际是没有内容的,只是起到一个请求转发的作用,将maven用户的下载请求转发给其它仓库处理。

nexus默认有仓库组 maven-public

打开如下:

仓库组对外url:本地maven可以通过这个url从仓库组中下载构件至本地仓库

仓库组中成员:maven-releases(宿主的releases仓库版本)maven-snapshots(宿主快照版本的仓库)maven-central(maven社区的中央仓库的代理)

刚刚新增的 maven-apache 在左边,需要将它迁移到右边来,并且放在第三个位置,因为上述说过仓库组的查找是有顺序的,需要将速度快的放在前面,这个新增的仓库速度比maven-central速度要快。

如下:

3、本地Maven下载构建

先搭建一个新项目。

找到仓库组提供的url:

3.1 pom.xml方式

 在新建项目的pom文件中加入如下内容:

<repositories><repository><id>maven-nexus</id><url>http://localhost:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></repository>
</repositories><!--该配置是为了防止pom中的jar包从私服下载之后,但是执行mvn中从插件还是从中央仓库中下载-->
<pluginRepositories><pluginRepository><id>maven-nexus</id><url>http://localhost:8081/repository/maven-public/</url></pluginRepository>
</pluginRepositories>

因为nexus需要有用户名和密码才能访问,所以需要在setting.xml文件中配置账号密码:

<server><id>maven-nexus</id><username>admin</username><password>1e1e7335-e723-441b-9876-a986b53e4130</password>
</server>

注意:setting.xml中的id需要和pom.xml文件中配置的id一致.username和password是自己在nexus中配置的。

完整配置文件:

<?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>com.nexus</groupId><artifactId>nexus-maven</artifactId><version>1.0-SNAPSHOT</version><name>nexus-maven Maven Webapp</name><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependency></dependencies><repositories><repository><id>maven-nexus</id><url>http://localhost:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></repository></repositories><!--该配置是为了防止pom中的jar包从私服下载之后,但是执行mvn中从插件还是从中央仓库中下载--><pluginRepositories><pluginRepository><id>maven-nexus</id><url>http://localhost:8081/repository/maven-public/</url></pluginRepository></pluginRepositories></project>

注意事项:

1、 自己在pom文件中配置了私服并且也在idea的maven中配置了settings.xml文件,但是jar包还是从官网下载。

原因:自己电脑上有好几个setting.xml文件,默认会找到settings.xml文件,自己当初指定的的xml文件名称并不是settings.xml文件名

解决方案:将其它的xml文件删掉或改名,并将自己指定的xml文件改名为settings.xml文件。

2、jar包从私服下载之后,但是执行mvn中从插件还是从中央仓库中下载

原因:所有的pom文件都继承了super pom:

解决方案:在自己的pom文件中添加如下:

<pluginRepositories><pluginRepository><id>central</id><url>http://host:port/content/groups/public(这里换成自己的私有maven仓库地址)</url></pluginRepository>

执行mvn compile

从结果看出:我们的依赖已经从我们私服maven-nexus中下载了。

3.2 镜像方式

镜像方式就不需要在pom文件中写多余的配置,主要是配置setting.xml文件

镜像配置:

<mirror><id>maven-nexus</id><mirrorOf>*</mirrorOf><name>nexus镜像</name><url>http://localhost:8081/repository/maven-public/</url>
</mirror>

server配置 

	<server><id>maven-nexus</id><username>admin</username><password>1e1e7335-e723-441b-9876-a986b53e4130</password></server>

注意:server的id和镜像的id配置一样。

然后pom文件删除之前的配置:

<?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>com.nexus</groupId><artifactId>nexus-maven</artifactId><version>1.0-SNAPSHOT</version><name>nexus-maven Maven Webapp</name><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependency></dependencies></project>

之前下载的本地仓库文件删掉,然后compile

发现也是从我们配置的镜像去下载。

4、本地依赖发布到私服

4.1 maven部署到nexus私服

一般创建maven项目时,会有pom文件,而Pom文件会有个version元素,这个是依赖的版本号。就拿我们刚刚创建的项目来讲

有一个1.0-SNAPSHOT,这个以-SNAPSHOT结尾的表示快照版本,叫做SNAPSHOT版本,快照版本一般不稳定,最后经过测试之后会发布一个稳定的版本,是不带SNAPSHOT后缀的。这个叫做release版本。

而nexus私服中存储用户的构建用的是宿主仓库,之前说过nexus私服提供了2个默认的宿主仓库分别用来存放SNAPSHOT版本和release版本。如下:

4.1.1 快照版本

第一步:在pom文件中添加如下:

<distributionManagement><repository><id>release-nexus</id><url>http://localhost:8081/repository/maven-releases//</url><name>nexus私服中宿主仓库->存放/下载稳定版本的构件</name></repository><snapshotRepository><id>snapshot-nexus</id><url>http://localhost:8081/repository/maven-snapshots/</url><name>nexus私服中宿主仓库->存放/下载快照版本的构件</name></snapshotRepository>
</distributionManagement>

第二步:settings.xml文件添加如下:

<server><id>release-nexus</id><username>admin</username><password>1e1e7335-e723-441b-9876-a986b53e4130</password>
</server><server><id>snapshot-nexus</id><username>admin</username><password>1e1e7335-e723-441b-9876-a986b53e4130</password>
</server>

第三步:执行 mvn deploy

可以看到都上传到nexus的快照仓库中去了。

访问快照仓库的地址:http://localhost:8081/repository/maven-snapshots/

如下: 

 点击browse连接:

如果需要坐标地址:直接点击pom去获取

4.1.2 release版本

 修改pom.xml的版本号,将-SNAPSHOT去掉。如图

其它步骤和4.1.1一样,只不过地址是:http://localhost:8081/repository/maven-releases/

 最后看结果

一样是成功了,上传到我们的release库中。

4.2 手动部署依赖到私服

 手动部署只支持release版本        

点击第一行:

具体参考:文章

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

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

相关文章

《ElementPlus 与 ElementUI 差异集合》icon 图标使用(包含:el-button,el-input和el-dropdown 差异对比)

安装 注意 ElementPlus 的 Icon 图标 要额外安装插件 element-plus/icons-vue. npm install element-plus/icons-vue注册 全局注册 定义一个文件 element-icon.js &#xff0c;注意代码第 6 行。加上了前缀 ElIcon &#xff0c;避免组件命名重复&#xff0c;且易于理解为 e…

TinTin Web3 动态精选:以太坊坎昆升级利好 Layer2,比特币减半进入倒计时

TinTin 快讯由 TinTinLand 开发者技术社区打造&#xff0c;旨在为开发者提供最新的 Web3 新闻、市场时讯和技术更新。TinTin 快讯将以周为单位&#xff0c; 汇集当周内的行业热点并以快讯的形式排列成文。掌握一手的技术资讯和市场动态&#xff0c;将有助于 TinTinLand 社区的开…

【每日力扣】235. 二叉搜索树的最近公共祖先与39. 组合总和问题描述

&#x1f525; 个人主页: 黑洞晓威 &#x1f600;你不必等到非常厉害&#xff0c;才敢开始&#xff0c;你需要开始&#xff0c;才会变的非常厉害。 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义…

硬件工程师入门基础知识(零)心法篇

硬件工程师入门基础知识(零)心法篇 1.为什么要当硬件工程师?2.什么是硬件工程师?3.怎么成为合格的硬件工程师?4.优秀的硬件工程师需要具备什么技能和品质?5.硬件工程师的成长路径?6.硬件工程师还有哪些职业可能?1.为什么要当硬件工程师? 很多快要毕业或者刚毕业的同学…

【2024年5月备考新增】《软考真题分章练习 - 5 项目进度管理(高项)》

1、( ) is a technique for estimating the duration or cost of an activity or a project using historical data from a similar activity or project. A.Analogous estimating B. parametric estimating C.Three-Point estimating D. Bottom estimating 2、下图中(单位:…

如何本地搭建hMailServer邮件服务

文章目录 前言1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 前言 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpola…

免密ssh密钥登录Linux该如何设置

我们在使用ssh客户端远程连接Linux服务器时&#xff0c;为了考虑安全方面的因素&#xff0c;通常使用密钥的方式来登录。密钥分为公钥和私钥&#xff0c;这两把密钥可以互为加解密。公钥是公开的&#xff0c;私钥是由个人自己持有&#xff0c;并且必须妥善保管和注意保密。 Li…

《圣斗士星矢》AI制作真人大电影宣传片

《圣斗士星矢》AI制作真人大电影宣传片 The ancient gods awaken, a battle of light and shadow unfolds.古神觉醒&#xff0c;光明与黑暗之战一触即发。 Heroes stand, facing the abyss of evil.英雄挺立&#xff0c;直面邪恶深渊。 The stars align, the chosen ones ris…

Linux:kubernetes(k8s)有状态的服务部署(14)

之前我都是对无状态进行的一个操作&#xff0c;我们想扩容就扩容&#xff0c;想缩容就缩容&#xff0c;根本不用去考虑他的一个网络环境&#xff0c;本地储存环境啥的一个状态 当我们做有状态的服务的操作&#xff0c;肯定要申请一个持久化的一个空间&#xff0c;以及网络&…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:GridItem)

网格容器中单项内容容器。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。仅支持作为Grid组件的子组件使用。 子组件 可以包含单个子组件。 接口 GridItem GridItem(value?: GridItemOptions)…

【数据结构与算法】:选择排序与快速排序

&#x1f525;个人主页&#xff1a; Quitecoder &#x1f525;专栏&#xff1a;数据结构与算法 我的博客即将同步至腾讯云开发者社区&#xff0c;邀请大家一同入驻&#xff1a;腾讯云 欢迎来到排序的第二个部分&#xff1a;选择排序与快速排序&#xff01; 目录 1.选择排序1.…

鸿蒙原生应用元服务开发-WebGL网页图形库开发着色器绘制彩色三角形

着色器绘制彩色三角形 使用WebGL开发时&#xff0c;为保证界面图形显示效果&#xff0c;请使用真机运行。 此场景为使用WebGL绘制的彩色三角形图形&#xff08;GPU绘制&#xff09;。开发示例如下&#xff1a; 创建页面布局。index.hml示例如下&#xff1a; <div class&quo…

鸿蒙开发(五)-应用签名相关

鸿蒙开发(五)-应用签名相关 本篇文章主要介绍下鸿蒙应用下的应用签名的创建与配置。 根据之前的介绍&#xff0c;我们知道&#xff0c;在DevEco Studio默认创建的应用程序&#xff0c;是没有sign配置的。 默认输出的应用文件如下&#xff1a; build->default->output…

力扣面试150 两数之和 II - 输入有序数组 双指针 HashMap

Problem: 167. 两数之和 II - 输入有序数组 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code class Solution {public int[] twoSum(int[] numbers, int target) {int l 0;int r numbers.length-1;while(l < r){if(numbers[l] numbers[…

MySQL基础-----多表查询之子查询

目录 前言 子查询概述 1.概念 2.分类 一、标量子查询 二、列子查询 三、行子查询 四、表子查询 前言 上一期我们讲了内外连接查询以及自连接查询&#xff0c;那么本期我们就学习多表查询的子查询。本期会详细讲解什么是子查询&#xff0c;以及子查询的相关功能&#xf…

智慧公厕建设,助力打造宜居、韧性、可持续的智慧城市

公共厕所作为智慧城市的重要组成部分&#xff0c;对于城市的高质量发展起着至关重要的作用。智慧公厕建设旨在通过全面监测、控制和管理公共厕所&#xff0c;实现多方面功能&#xff0c;包括公共厕所环境监测与调控、厕位占用监测与引导、消耗品监测与缺失提示、安全防范与管理…

力扣78. 子集

Problem: 78. 子集 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.定义一维数组track用于记录决策路径&#xff0c;二维数组res用于存储所有的子集&#xff1b; 2.决策阶段&#xff1a;从0阶段起来&#xff08;0阶段决策路径中为空集&#xff09;&#xff0c;每…

【拓扑空间】可分性2

可分拓扑空间 如果拓扑空间有可数的稠密子集&#xff0c;则称是可分拓扑空间。 可分&#xff1a;有可数子集A&#xff0c; 拓扑空间&#xff1a; 1.&#xff0c; 2.任意并 3.有限交 稠密&#xff1a; 闭包 导集&#xff1a;所有聚点的集合 聚点&#xff1a;任意去心领域&am…

并查集Disjoint Set

并查集的概念 并查集是一种简单的集合表示&#xff0c;它支持以下三种操作 1. make_set(x)&#xff0c;建立一个新集合&#xff0c;唯一的元素是x 2. find_set(x)&#xff0c;返回一个指针&#xff0c;该指针指向包含x的唯一集合的代表&#xff0c;也就是x的根节点 3. union_…

easyExcel 导入、导出Excel 封装公共的方法

文档包含三部分功能 1、easyExcel 公共导出list<对象>方法&#xff0c;可以自定义excel中第一行和样式 2、easyExcel 导入逻辑&#xff0c;结合spring Validator 验证导入数据是否符合规范 3、easyExcel 自定义导出 list<map> 、 list<对象> &#xff08;可…