maven私服搭建详细教程

news2025/7/19 7:52:40

目录

1 为什么需要私服

2 Nexus私服

2.1 Nexus下载及登录

2.2 maven仓库

 2.2.1 代理仓库

 2.2.2 宿主仓库

2.2.3 仓库组

 3 本地Maven下载构建

3.1 pom.xml方式

 3.2 镜像方式

4 本地依赖发布到私服

4.1 maven部署到nexus私服

4.1.1 快照版本

​4.1.2 release版本

4.2 手动部署依赖到私服

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

推荐使用第三种,本文将在windows环境下介绍这三种。

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-aliyun在左边,需要将它迁移到右边来,并且放在第三个位置,因为上述说过仓库组的查找是有顺序的,需要将速度快的放在前面,这个新增的仓库速度比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://localhost:8081/#browse/browse:maven-releases

 

 参考文章:Maven系列第5篇:私服详解_路人甲Java的博客-CSDN博客

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

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

相关文章

在这个满地测试工程师当中,测试工程师如何突破职业瓶颈?

目录 前言&#xff1a; 测试行业现状 如何破局 项目经验 开发能力 自动化测试能力 测试开发架构能力 持续测试能力 影响力 前言&#xff1a; 软件测试是为了发现程序中的错误而执行程序的过程。 通俗的说&#xff0c;软件测试需要在发布软件之前&#xff0c;尽可能的找软件的…

移动端布局之flex布局2:flex布局父项常见属性、flex布局子项常见属性、案例:携程网首页案例制作(曾经的版本)1

移动端布局之flex布局2 flex布局父项常见属性flex-flow属性 flex布局子项常见属性flex属性&#xff08;重要&#xff09;align-self控制子项自己在侧轴上的排列方式order属性定义项目的排列顺序 案例&#xff1a;携程网首页案例制作(曾经的版本)技术选型搭建相关文件夹结构设置…

Vue中class与style绑定。用v-bind绑定。完整的体验class编写style过程。

表达式结果的类型可以是字符串、对象、数组。 一、对象语法&#xff1a; 1、新建一个html文件&#xff0c;生成基本结构之后引入vue的cdn <script src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.js"></script> 2、在body中写入一个id名为app的div…

4年测试经验面试,基础都不会张口就是20k,这也没谁了

现在招个合适的人可真难呀&#xff0c;不是这不会就是那不会&#xff0c;没有一个让我满意的 公司前段时间缺人&#xff0c;面试了不少的测试&#xff0c;结果居然没有一个符合要求的。一开始瞄准的就是中级测试工程师的水准&#xff0c;也没指望来技术大牛&#xff0c;提供的薪…

【Mysql】执行sql语句后,mysql都做了什么?

查数据大家都经常干&#xff0c;但是你知道从执行sql到看到结果&#xff0c;mysql背后都做了什么事情吗&#xff1f; 一、mysql的架构 client/server 这种客户端到服务端的架构&#xff0c;大家一定都很熟悉&#xff0c;其实 mysql 也与之类似。 可以有多个客户端与服务端连接…

当前经济环境下,企业如何落地「降本增效」?

当前经济环境下&#xff0c;竞争形势激烈&#xff0c;IT企业面临着不少的挑战&#xff0c;比如说实施项目利润低、用人成本高、盈利能力难预测、项目前期投入大等&#xff0c;导致企业整体盈利能力下降。 不少IT老板都逐渐意识到「降本增效」的重要性&#xff0c;那么如何真正…

如何提高倾斜摄影三维模型数据裁剪速度?

如何提高倾斜摄影三维模型数据裁剪速度&#xff1f; 倾斜摄影三维模型数据裁剪是一个重要的数据处理步骤&#xff0c;用于去除不必要的部分并保留需要的数据。在实际应用中&#xff0c;倾斜摄影三维模型数据量通常很大&#xff0c;因此如何提高倾斜摄影三维模型数据裁剪速度成…

南洋才女,德艺双馨,孙燕姿本尊回应AI孙燕姿(基于Sadtalker/Python3.10)

孙燕姿果然不愧是孙燕姿&#xff0c;不愧为南洋理工大学的高材生&#xff0c;近日她在个人官方媒体博客上写了一篇英文版的长文&#xff0c;正式回应现在满城风雨的“AI孙燕姿”现象&#xff0c;流行天后展示了超人一等的智识水平&#xff0c;行文优美&#xff0c;绵恒隽永&…

服了呀,00后实在是太卷了.....

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。 这不&#xff0c;前段时间我们公司来了个00后&#xff0c;工作都没两年&#xff0c;跳槽到我们公司起薪20K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了…

2023北京高考作文,AI助手来应考,能满分?

微写作&#xff08;10分&#xff09; 从下面三个题目中任选一题&#xff0c;按要求作答。不超过150字。不透露所在区、学校及个人信息。 &#xff08;1&#xff09;近年来&#xff0c;微信公众号成为信息传播的一种重要媒介。班级准备创建自己的公众号&#xff0c;但对是否需…

只需8个步骤,即可在线创建优秀的帮助中心

创建一个优秀的帮助中心可以帮助企业更好地向用户传递信息&#xff0c;提高用户满意度和忠诚度。在今天的数字化时代&#xff0c;许多企业都已经开始意识到了帮助中心的重要性。 8个步骤&#xff0c;帮助您在线创建一个优秀的帮助中心 步骤1&#xff1a;明确目标和用户需求 …

2.4 利用MyBatis实现条件查询

一、打开MyBatisDemo项目 二、对学生表实现条件查询 1、创建学生映射器配置文件 在resources/mapper目录里创建学生映射器配置文件 - StudentMapper.xml <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org…

2023年十大最佳自动化测试工具(建议收藏)

Best Automation Testing Tools for 2023 对更快交付高质量软件&#xff08;或"快速质量"&#xff09;的需求要求组织以敏捷&#xff0c;持续集成&#xff08;CI&#xff09;和DevOps方法论来寻找解决方案。测试自动化是这些方面的重要组成部分。最新的《 2018-2019…

2023接口自动化测试,完整入门篇(超详细~)

一、自动化测试 众所周知&#xff0c;自动化测试已经成为软件项目中不可或缺的测试方法。基于用户交互界面&#xff08;GUI&#xff09;的自动化测试方法具有模拟用户行为和过程可视化的特点&#xff0c;因此受到了广大入门自动化人士的喜爱。诸如&#xff1a;QTP、Selenium等…

问题记录:K8s中安装calico,calico反复重启,原因:版本未匹配

问题描述 K8s版本1.23.6 calico-node-反复重启&#xff0c;READY状态一直为0&#xff0c;STATUS为CrashLoopBackOff&#xff0c; 查看节点日志 #calico-node-xxx 对应pod名称 kubectl logs calico-node-xxxx -n kube-system 没有错误&#xff0c;只有info信息 但是一直反…

代码随想录算法训练营15期 Day 14 | 理论基础、递归遍历、迭代遍历、统一迭代

理论基础 二叉树的种类 需要了解 二叉树的种类&#xff0c;存储方式&#xff0c;遍历方式 以及二叉树的定义 满二叉树 满二叉树&#xff1a;如果一棵二叉树只有度为0的结点和度为2的结点&#xff0c;并且度为0的结点在同一层上&#xff0c;则这棵二叉树为满二叉树。 完全二叉树…

十年寒冰,IT老鸟告诉你如何快速入门一个编程语言 #如何系统学习一门it技术#

我个人算是学了非常多的各类编程语言了&#xff0c;从最早的.NET到后面的PHP、数据库MySQL、Redis、前端&#xff08;HTML、CSS、JS&#xff09;、公众号开发、再到后面因为工作的需要&#xff0c;学习前端工程化、NodeJs、Vue、React、以及个人学习爬虫的时候把Python也学了&a…

复合材料压缩模拟探究:选取应变分量的区别,与实验结果的对比分析

复合材料压缩模拟探究&#xff1a;选取应变分量的区别&#xff0c;与实验结果的对比分析 一、模型介绍 6641的试验件模拟。加强片是采用continuum shell&#xff0c;试验件采用每层一个单元&#xff0c;并且采用一层一个材料&#xff0c;并定义方向。 试验件材料为X850材料&a…

做接口测试必须要弄明白的7个问题

1. 为什么要进行接口测试 接口测试是软件测试中必不可少的环节之一。在软件开发过程中&#xff0c;不同的模块之间需要通过接口进行交互&#xff0c;因此对接口进行测试可以有效地检测模块间的交互是否正常&#xff0c;从而保证整个系统的质量和稳定性。 2. 接口测试的作用 接…

跨境必看!FP独立站必备安全支付方式

收款对于做F牌独立站的卖家来说至关重要&#xff0c;收款的方式有很多种&#xff0c;卖家在选择收款方式时需要关注什么&#xff1f;FP独立站必备的支付收款方式又有哪些&#xff1f;卖家又该如何选择呢&#xff1f; 一、在选择支付方式时要注意什么&#xff1f;1.安全合规&…