背景
回顾下maven的构建流程,如果没有私服,我们所需的所有jar包都需要通过maven的中央仓库或者第三方的maven仓库下载到本地,当一个公司或者一个团队所有人都重复的从maven仓库下载jar包,这样就加大了中央仓库的负载和浪费了外网的带宽,如果网速慢的话还会影响项目的进程。
分析
公司在自己的局域网内搭建自己的远程仓库服务器,称为私服,私服服务器即是公司内部的 maven 远程仓库,每个员工的电脑上安装 maven 软件并且连接私服服务器,员工将自己开发的项目打成 jar 并发布到私服服务器,其它项目组从私服服务器下载所依赖的构件(jar)。
私服还充当一个代理服务器,当私服上没有 jar 包会从互联网中央仓库自动下载,如下图:

1 下载 nexus

Nexus 是 Maven 仓库管理器,通过 nexus 可以搭建 maven 仓库,同时 nexus 还提供强大的仓库管理功能,构件搜索功能等。
下载 Nexus,
下载Window版本官网

提供百度云链接
链接:https://pan.baidu.com/s/1ZumMfCkCI2-E7hdk2UTNLA
提取码:yyds

2 安装 nexus


以管理员身份打开cmd,进入到bin目录,先执行nexus install命令,再执行nexus start

cmd 进入 bin 目录,执行

nexus  install

安装成功在服务中查看有 nexus 服务:

3 卸载 nexus
cmd 进入 nexus 的 bin 目录,执行:

nexus.bat uninstall

查看 window 服务列表 nexus 已被删除。
4 启动 nexus
方法 1:
cmd 进入 bin 目录,执行

nexus start


方法 2:
直接启动 nexus 服务

查看 nexus 的配置文件 conf/nexus.properties

访问:
http://localhost:8081/nexus/

使用 Nexus 内置账户 admin/admin123 登陆:
点击右上角的 Log in,输入账号和密码 登陆

登陆成功:
登录成功后点击左侧菜单Repositories可以看到nexus内置的仓库列表(如下图)

nexus仓库类型
通过前面的仓库列表可以看到,nexus默认内置了很多仓库,这些仓库可以划分为4种类型,每种类型的仓库用于存放特定的jar包,具体说明如下:

hosted:  宿主仓库,部署自己的jar到这个类型的仓库,包括Releases和Snapshots两部分,Releases为公司内部发布版本仓库、 Snapshots为公司内部测试版本仓库proxy:  代理仓库,用于代理远程的公共仓库,如maven中央仓库,用户连接私服,私服自动去中央仓库下载jar包或者插件,不允许用户自己上传jar包,只能从中央仓库下载group:  仓库组,用来合并多个hosted/proxy仓库,通常我们配置自己的maven连接仓库组,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可virtual(虚拟):兼容Maven1版本的jar或者插件,虚拟仓库基本废弃了

提出来说一下
group: 仓库组
查看group仓库包含哪些仓库

hosted: 宿主仓库 (hosted类型仓库是真正存放jar的地方)
有三种宿主仓库:

1: 3rd party 用于存放第三方jar包的仓库(非官方,非自己封装的)
2:Snapshots 快照仓库用于存放本公司(组织)的项目的快照版(非正式版)自己写的项目版本号中包含snapshot的项目,就会打包放到这个仓库
例如,我们创建的项目

3:Releases 发行版仓库用于本公司(组织)的项目的发行版,自己写的项目版本号中包含RELEASE的项目,都会打包放到这个仓库
例如

综上:

假设我们要将中央仓库的jar包放在私服里,我们就选择 Central仓库
假设公司自己封装的jar包,并且是测试快照版本的,我们就选择Snapshots仓库
假设公司自己封装的jar包,并且是发行版本的,我们就选择Releases仓库
我们从第三方买了一个框架jar包,我们就选择3rd party仓库

预置仓库

Central:该仓库代理Maven中央仓库,其策略为Release,因此只会下载和缓存中央仓库中的发布版本构件。Releases:这是一个策略为Release的宿主类型仓库,用来部署正式发布版本构件。Snapshots:这是一个策略为Snapshot的宿主类型仓库,用来部署开发版本构件。3rd party:这是一个策略为Release的宿主类型仓库,用来部署无法maven中央仓库获得的第三方发布版本构件,比如IBM或者oracle的一些jar包(比如classe12.jar),由于受到商业版权的限制,不允许在中央仓库出现,如果想让这些包在私服上进行管理,就需要第三方的仓库。Public Repositories:一个组合仓库

nexus仓库类型与安装目录对应关系

案例一

将项目发布到私服

1需求

​ 企业中多个团队协作开发通常会将一些公用的组件、开发模块等发布到私服供其它团队或模块开发人员使用。
​ 本例子假设多团队分别开发 . 某个团队开发完在common_utils, 将 common_utils发布到私服供 其它团队使用.

首先我们准备一个common_utils项目


1 配置
第一步:需要在客户端即部署common_utils工程项目的电脑上配置 maven环境,并修改 settings.xml文件,配置连接私服的用户和密码 。
此用户名和密码用于私服校验,因为私服需要知道上传的账号和密码是否和私服中的账号和密码一致。

  <!--去关联私服当中的releases仓库 --><server><id>releases</id><username>admin</username><password>admin123</password></server><!--去关联私服当中的snapshots仓库 --><server><id>snapshots</id><username>admin</username><password>admin123</password></server>

releases 连接发布版本项目仓库
snapshots 连接测试版本项目仓库

第二步: 配置项目 pom.xml
配置私服仓库的地址,本公司的自己的 jar 包会上传到私服的宿主仓库,根据工程的版本号决定上传到哪个宿主仓库,如果版本为 release 则上传到私服的 release 仓库,如果版本为snapshot 则上传到私服的 snapshot 仓库

    <distributionManagement><!--当前项目关联私服当中的两个仓库--><repository><id>releases</id><url>http://localhost:8081/nexus/content/repositories/releases/</url></repository><snapshotRepository><id>snapshots</id><url>http://localhost:8081/nexus/content/repositories/snapshots/</url></snapshotRepository></distributionManagement>

注意:pom.xml 这里 和 settings.xml 配置 对应!

3 测试
将项目common_utils工程打成 jar 包发布到私服:
1、首先启动 nexus
2、对 common_utils工程执行 deploy 命令

根据本项目pom.xml中version定义决定发布到哪个仓库,如果version定义为snapshot,执行 deploy后查看 nexus 的 snapshot仓库,如果 version定义为 release则项目将发布到 nexus的 release 仓库,本项目将发布到 snapshot 仓库:

成功部署到私服snapshots仓库当中,部署到私服的同时,本地仓库其实也安装了一份

我们去私服服务器查看一下:

从私服下载 jar 包

没有配置 nexus 之前,如果本地仓库没有,去中央仓库下载,通常在企业中会在局域网内部署一台私服服务器,有了私服本地项目首先去本地仓库找 jar,如果没有找到则连接私服从私服下载 jar 包,如果私服没有 jar 包私服同时作为代理服务器从中央仓库下载 jar 包,这样做的好处是一方面由私服对公司项目的依赖 jar 包统一管理,一方面提高下载速度,项目连接私服下载 jar 包的速度要比项目连接中央仓库的速度快的多。

本例子测试从私服下载commons-utils 工程 jar 包。注意,我们将本地仓库安装的commons-utils 工程 jar 包删除,因为在部署到私服的时候,本地仓库默认也安装的一份

以上的依赖首先回去本地仓库查找,但是本地仓库没有,就会去中央仓库下载,但是这个common_utils是我们自己开发部署的中央仓库也没有,只在私服上才有
1 在 setting.xml 中配置仓库
在客户端的 setting.xml 中配置私服的仓库,由于 setting.xml 中没有 repositories 的配置标签需要使用 profile 定义仓库

<profile><!--profile 的 id--><id>dev</id><repositories><repository><!--仓库 id, repositories 可以配置多个仓库,保证 id 不重复--><id>nexus</id><!--仓库地址,即 nexus 仓库组的地址--><url>http://localhost:8081/nexus/content/groups/public/</url><!--是否下载 releases 构件--><releases><enabled>true</enabled></releases><!--是否下载 snapshots 构件--><snapshots><enabled>true</enabled></snapshots></repository></repositories><pluginRepositories><!-- 插件仓库, maven 的运行依赖插件,也需要从私服下载插件 --><pluginRepository><!-- 插件仓库的 id 不允许重复,如果重复后边配置会覆盖前边 --><id>public</id><name>Public Repositories</name><url>http://localhost:8081/nexus/content/groups/public/</url></pluginRepository></pluginRepositories>
</profile>

使用 profile 定义仓库需要激活才可生效。

  <!--使用profile定义仓库需要激活才可生效--><activeProfiles><activeProfile>dev</activeProfile></activeProfiles>

测试从私服下载 jar 包
use_demo项目先从本地仓库找common_utils,找不到从私服找,由于之前执行 deploy 将common_utils部署到私服中,所以成功从私服下载common_utils并在本地仓库保存一份。

把第三方 jar 包放入本地仓库和私服

导入本地库

  • 随便找一个 jar 包测试, 可以先 CMD进入到 jar 包所在位置,运行
mvn install:install-file -DgroupId=com.itheima -DartifactId=nbutil -Dversion=1.1.37 -Dfile=nbutil-1.1.37.jar -Dpackaging=jar


导入私服

需要在 maven 软件的核心配置文件 settings.xml 中配置第三方仓库的 server 信息

 <!--去关联私服当中的3rd party仓库 -->
<server><id>thirdparty</id><username>admin</username><password>admin123</password>
</server>


才能执行一下命令

mvn deploy:deploy-file -DgroupId=com.itheima -DartifactId=nbutil -Dversion=1.1.37 -Dpackaging=jar -Dfile=nbutil-1.1.37.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty


3.参数说明

DgroupId 和 DartifactId 构成了该 jar 包在 pom.xml 的坐标,项目就是依靠这两个属性定位。自己起名字也行。

Dfile 表示需要上传的 jar 包的绝对路径。

Durl 私服上仓库的位置,打开 nexus——>repositories 菜单,可以看到该路径。

DrepositoryId 服务器的表示 id,在 nexus 的 configuration 可以看到。

Dversion 表示版本信息。

关于 jar 包准确的版本:

​ 包的名字上一般会带版本号,如果没有那可以解压该包,会发现一个叫 MANIFEST.MF 的文件

​ 这个文件就有描述该包的版本信息。

​ 比如 Specification-Version: 2.2 可以知道该包的版本了。

​ 上传成功后,在 nexus 界面点击 3rd party 仓库可以看到这包。

搭建私服环境及私服的使用-将第三方jar上传私服相关推荐

  1. Gradle 7.4 包上传私服

    文章目录 个人环境 一.配置代码 总结 相关阅读 个人环境 Macbook Air M1 使用 SDK 工具安装的 Gradle 7.4 一.配置代码 下面是 build.gradle 的配置 plu ...

  2. 本地项目及依赖上传私服nexus

    本地项目通过maven deploy上传到nexus 1.在settings.xml中添加server信息 <server><id>nexus-snapshots</id ...

  3. Vue自定义组件npm上传私服,且从私服下载使用

    Vue自定义组件npm上传私服,yarn私服下载使用 安装镜像源管理工具nrm 发布自定义组件到公司私服 若未下载nrm源管理工具直接使用npm设置私服地址也可以 以下步骤都是基于npm命令 从私服下 ...

  4. Maven : 将Jar安装到本地仓库和Jar上传到私服[转]

    原文地址 :https://www.cnblogs.com/shindo/p/6609797.html 1.单个jar上上传 方法一:利用界面  使用Sonatype Nexus搭建Maven私服后添 ...

  5. Maven : 将 Jar 安装到本地仓库和 Jar 上传到私服

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Jar的maven配置 <dependency> <groupId>org. ...

  6. 用Express、MySQL搭建项目(接口以及静态文件获取、文件上传等)

    一.简介 本文将主要基于node.js使用express框架搭建一个后台环境,包括如何自定义项目目录.所用依赖以及中间件.路由以及模板引擎.接口数据获取以及文件上传等内容. 二.后台环境搭建 1.新建 ...

  7. 搭建NFS共享目录,解决wordpress负载均衡图片上传问题

    1.剧情回顾 在之前的博客里面,我搭建了两个WEB服务器,然后在前端搭建了一个Nginx负载均衡服务器,用来分发请求给两个不同的服务器(https://blog.51cto.com/superpcm/ ...

  8. 物联网平台搭建的全过程介绍(七)——本地数据批量上传阿里云物联网实例内TSDB

    在文章物联网平台搭建的全过程介绍(六)--物联网TSDB之基本知识及读写代码介绍中介绍了TSDB基础知识和读取和写入数据的基本操作.但在该文中只给出了单条数据写入的代码. 那么假如有这样一种情况,我物 ...

  9. maven deploy上传私服出错

    error 内容如下 Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.5:  deploy (default ...

最新文章

  1. 韩顺平循序渐进学java 第10.11讲 继承.重载.覆盖
  2. Vue轻松入门,一起学起来!
  3. 微软发布新Azure 媒体服务 API(V3),现已全面可用
  4. 【PM模块】维护业务处理流程—内部维护(通知单)
  5. 《Python知识手册》,高清pdf免费获取
  6. 《VMware vSphere设计(原书第2版)》——1.3 设计原则
  7. 在去长春和松源的路上
  8. 厉害了!这几位小学生竟然在艺术界掀起一阵风暴,简直是灵魂画手无疑.........
  9. appium for java教程_appium自动化测试入门(java版)
  10. Draconian,自由或保姆状态:Java,C#,C,C ++,Go和Rust中的并发意识形态
  11. 苏强SN系列服务器说明书,第一章 SN2000交流伺服驱动器使用手册.pdf
  12. python封装:隐藏对象中的属性或方法(三分钟读懂)
  13. loadrunner解决在项目中的难点解决
  14. Junit原生断言和hamcrest断言的不同与使用
  15. syslog工具_INAV:一款专用的日志审查导航工具
  16. 曲线绕y轴旋转一周所得旋转体体积_求下列曲线绕指定轴旋转一周所围成的旋转体的体积...
  17. 【图像处理】换脸技术哪家强?Python来挑战,一键换脸,毫无破绽~
  18. 清除计算机用户缓存,如何清除电脑的内存缓存?
  19. 百家号同步公众号的自媒体工具有吗?
  20. SQL*NET MORE data to client

热门文章

  1. 爬虫2_2019年549所中国大学排名
  2. Win10沙盒功能,系统自带免费免安装
  3. linux系统如何设置程序开机自启动
  4. python0x452_python at 0x
  5. windows一段时间后发现C盘满了如何检查并清理
  6. Python —— 列表的while循环遍历 、for循环遍历
  7. 深度学习之数据处理方法概述
  8. 如何理解、分析DNU/DAU?(案例:DNU、DAU面积图)
  9. EAS Web:新增按钮弹出新页签
  10. php角colspan=,PHPWord生成word实现table合并(colspan和rowspan)