Java_Maven:4. maven 私服

news2024/9/22 17:27:29

目录

1 需求

2 分析

3 搭建私服环境

3.1 下载 nexus

3.2 安装 nexus

3.3 卸载 nexus

3.4 启动 nexus

3.5 仓库类型

4 将项目发布到私服

4.1 需求

4.2 配置

4.3 测试

5 从私服下载 jar 包

5.1 需求

5.2 管理仓库组

5.3 在 setting.xml 中配置仓库

5.4 测试从私服下载 jar 包


  • 1 需求

    • 正式开发,不同的项目组开发不同的工程。
    • ssm_dao 工程开发完毕,发布到私服。
    • ssm_service 从私服下载 dao
  • 2 分析

    • 公司在自己的局域网内搭建自己的远程仓库服务器,称为私服,私服服务器即是公司内部的 maven 远程仓库,每个员工的电脑上安装 maven 软件并且连接私服服务器,员工将自己开发的项目打成 jar 并发布到私服服务器,其它项目组从私服服务器下载所依赖的构件(jar)。
    • 私服还充当一个代理服务器,当私服上没有 jar 包会从互联网中央仓库自动下载,如下图:
  • 3 搭建私服环境

    • 3.1 下载 nexus

      • Nexus 是 Maven 仓库管理器,通过 nexus 可以搭建 maven 仓库,同时 nexus 还提供强大的仓库管理功能,构件搜索功能等。
        • 下载 Nexus, 下载地址:https://www.sonatype.com/products/repository-oss-download
        • 下载:nexus-3.47.1-01-win64.zip
    • 3.2 安装 nexus

      •   解压 nexus-3.47.1-01-win64.zip,本教程将它解压在 F 盘,进入 bin 目录:
      •  
      •   cmd 进入 bin 目录,执行 nexus.bat install
      •  
      •   安装成功在服务中查看有 nexus 服务:
      • ​​​​​​​ 
    • 3.3 卸载 nexus

      •   cmd 进入 nexus 的 bin 目录,执行:nexus.bat uninstall
      •    
      •   查看 window 服务列表 nexus 已被删除。
    • 3.4 启动 nexus

      • 方法 1:
        • cmd 进入 bin 目录,执行 nexus.bat start
      • 方法 2:
        • 直接启动 nexus 服务
        • 查看 nexus 的配置文件 conf/nexus.properties
        • # Jetty section
        • application-port=8081 # nexus 的访问端口配置
        • application-host=0.0.0.0 # nexus 主机监听配置(不用修改)
        • nexus-webapp=${bundleBasedir}/nexus # nexus 工程目录
        • nexus-webapp-context-path=/nexus # nexus 的 web 访问路径
        • # Nexus section
        • nexus-work=${bundleBasedir}/../sonatype-work/nexus # nexus 仓库目录
        • runtime=${bundleBasedir}/nexus/WEB-INF # nexus 运行程序目录
        • 访问:
        • http://localhost:8081/nexus/
        • 使用 Nexus 内置账户 admin/admin123 登陆:
        • 点击右上角的 Log in,输入账号和密码 登陆:
        • 登陆成功:
    • 3.5 仓库类型

      • nexus
      • 查看 nexus 的仓库:
      • nexus 的仓库有 4 种类型:
        • 1. hosted,宿主仓库,部署自己的 jar 到这个类型的仓库,包括 releases 和 snapshot 两部分,Releases 公司内部发布版本仓库、 Snapshots 公司内部测试版本仓库
        • 2. proxy,代理仓库,用于代理远程的公共仓库,如 maven 中央仓库,用户连接私服,私服自动去中央仓库下载 jar 包或者插件。
        • 3. group,仓库组,用来合并多个 hosted/proxy 仓库,通常我们配置自己的 maven 连接仓库组。
        • 4. virtual(虚拟):兼容 Maven1 版本的 jar 或者插件
      • nexus 仓库默认在 sonatype-work 目录中:
        • ​​​​​​​​​​​​​​
      • central:代理仓库,代理中央仓库
        • ​​​​​​​​​​​​​​
      • apache-snapshots:代理仓库​​​​​​​
        • 存储 snapshots 构件,代理地址 https://repository.apache.org/snapshots/
      • central-m1:virtual 类型仓库,兼容 Maven1 版本的 jar 或者插件
      • releases:本地仓库,存储 releases构件。
      • snapshots:本地仓库,存储 snapshots构件。
      • thirdparty:第三方仓库
      • public:仓库组
  • 4 将项目发布到私服

    • 4.1 需求

      • 企业中多个团队协作开发通常会将一些公用的组件、开发模块等发布到私服供其它团队或模块开发人员使用。
      • 本例子假设多团队分别开发 ssm_dao、ssm_service、ssm_web,某个团队开发完在ssm_dao 会将 ssm_dao 发布到私服供 ssm_service 团队使用,本例子会将 ssm_dao 工程打成jar 包发布到私服。
    • 4.2 配置

      • 第一步:需要在客户端即部署 ssm_dao 工程的电脑上配置 maven环境,并修改 settings.xml文件,配置连接私服的用户和密码 。
        • 此用户名和密码用于私服校验,因为私服需要知道上传的账号和密码是否和私服中的账号和密码一致。
        • <server>
              <id>releases</id>
              <username>admin</username>
              <password>admin123</password>
          </server>
          
          <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 这里<id> 和 settings.xml 配置 <id> 对应!
    • 4.3 测试

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

        • ​​​​​​​​​​​​​​
      • 根据本项目pom.xml中version定义决定发布到哪个仓库,如果version定义为snapshot,执行 deploy后查看 nexus 的 snapshot仓库,如果 version定义为 release则项目将发布到 nexus的 release 仓库,本项目将发布到 snapshot 仓库:
      • 也可以通过 http 方式查看:

  • 5 从私服下载 jar 包

    • 5.1 需求

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

      • nexus中包括很多仓库,hosted中存放的是企业自己发布的jar包及第三方公司的jar包,proxy 中存放的是中央仓库的 jar,为了方便从私服下载 jar 包可以将多个仓库组成一个仓库组,每个工程需要连接私服的仓库组下载 jar 包。
      • 打开 nexus 配置仓库组,如下图:
      • ​​​​​​​
      • 上图中仓库组包括了本地仓库、代理仓库等。
    • 5.3 在 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 定义仓库需要激活才可生效。
      •  
        <activeProfiles>
            <activeProfile>dev</activeProfile>
        </activeProfiles>
      • 配置成功后通过 eclipse 查看有效 pom,有效 pom 是 maven 软件最终使用的 pom 内容,程序员不直接编辑有效 pom,打开有效 pom
      • ​​​​​​​
      • 有效 pom 内容如下:
      • 下边的 pom 内容中有两个仓库地址,maven 会先从前边的仓库的找,如果找不到 jar 包再从下边的找,从而就实现了从私服下载 jar 包。
      • <repositories>
            <repository>
                <releases>
                    <enabled>true</enabled>
                
                </releases>
        
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                
                <id>public</id>
                <name>Public Repositories</name>
                <url>http://localhost:8081/nexus/content/groups/public/</url>
            
            </repository>
        
            <repository>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
                
                <id>central</id>
                <name>Central Repository</name>
                <url>https://repo.maven.apache.org/maven2</url>
            
            </repository>
        
        </repositories>
        
        <pluginRepositories>
            <pluginRepository>
                <id>public</id>
                <name>Public Repositories</name>
                <url>http://localhost:8081/nexus/content/groups/public/</url>
            </pluginRepository>
         
            <pluginRepository>
                <releases>
                    <updatePolicy>never</updatePolicy>
                </releases>
        
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
                
                <id>central</id>
                <name>Central Repository</name>
                <url>https://repo.maven.apache.org/maven2</url>
        
            </pluginRepository>
        
        </pluginRepositories>
    • 5.4 测试从私服下载 jar 包

      • 测试 1:局域网环境或本地网络即可
        • 在 ssm_service 工程中添加以上配置后,添加 ssm_dao 工程的依赖,删除本地仓库中 ssm_dao工程,同时在 eclipse 中关闭 ssm_dao 工程。
        • 观察控制台:
          • ​​​​​​​
        • 项目先从本地仓库找 ssm_dao,找不到从私服找,由于之前执行 deploy 将 ssm_dao 部署到私服中,所以成功从私服下载 ssm_dao 并在本地仓库保存一份。
        • 如果此时删除私服中的 ssm_dao,执行 update project 之后是否正常?
        • 如果将本地仓库的 ssm_dao 和私服的 ssm_dao 全部删除是否正常?
      • 测试 2:需要互联网环境
        • 在项目的 pom.xml 添加一个依赖,此依赖在本地仓库和私服都不存在,maven 会先从本地仓库找,本地仓库没有再从私服找,私服没有再去中央仓库下载,jar 包下载成功在私服、本地仓库分别存储一份。

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

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

相关文章

C++之迭代器

迭代器C中&#xff0c;迭代器就是类似于指针的对象&#xff0c;但比指针的功能更丰富&#xff0c;它提供了对对象的间接访问&#xff0c;每个迭代器对象代表容器中一个确定的地址。举个例子&#xff1a;void test() {vector<int> vv{1,2,3,4,5};for(vector<int>::i…

大数据框架之Hadoop:MapReduce(一)MapReduce概述

1.1MapReduce定义 MapReduce是一个分布式计算框架&#xff0c;用于编写批处理应用程序&#xff0c;是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序&#xff0c;并发运行在一…

一文掌握如何对项目进行诊断?【步骤方法和工具】

作为项目经理和PMO&#xff0c;面对错综复杂的项目&#xff0c;需要对组织的项目运作情况进行精确的分析和诊断&#xff0c;找出组织项目管理中和项目运行中存在的问题和潜在隐患&#xff0c;分析其原因&#xff0c;预防风险&#xff0c;并且形成科学合理的决策建议和解决方案&…

day43【代码随想录】动态规划之一和零、完全背包理论基础

文章目录前言一、一和零&#xff08;力扣474&#xff09;二、完全背包前言 1、一和零 2、完全背包理论基础 一、一和零&#xff08;力扣474&#xff09; 求装满这个背包最多有多少个物品 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集…

Python实现查票以及自动购票....再也不用愁手速不够啦~

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 今天咱们来用Python做一个自动查票抢票的脚本&#xff0c;24小时抢票&#xff0c;谁抢的过你&#xff01; 准备工作 环境 Python 3.8 Pycharm 插件 谷歌浏览器驱动 模块 需要安装的第三方模块&#xff0c;直接pi…

极智AI | 算能SC5+智算卡驱动安装与升级

欢迎关注我的公众号 [极智视界]&#xff0c;获取我的更多经验分享 大家好&#xff0c;我是极智视界&#xff0c;本文介绍一下 算能SC5智算卡驱动安装与升级。 邀您加入我的知识星球「极智视界」&#xff0c;星球内有超多好玩的项目实战源码下载&#xff0c;链接&#xff1a;ht…

2023美赛问题E:光污染

背景 背景 光污染是指任何过多或不当使用人造光的表现。我们所称为光污染的一些现象包括光侵入、过亮、以及光混乱。这些现象最容易在大城市太阳落山后观察到天空中的发光&#xff1b;然而&#xff0c;它们也可能发生在更偏远的地区。 光污染改变了我们对夜空的看法&#xff…

递归与尾递归

你肯定知道递归&#xff0c;大概也知道尾递归。可是为什么要在递归中分出尾递归这样一个类&#xff1f;尾递归的本质又是什么&#xff1f;许多人未必清楚。 递归原是Lisp语言提出的概念&#xff0c;后来被许多语言借鉴。递归指自我重复的结构&#xff0c;在编程语言中体现为函…

共享模型之工具(二)

1.自定义线程池 1>.在实际开发过程中建议不要使用JDK提供的方式创建线程池,因为底层不方便优化,在请求量非常大的情况下可能会出现OOM,我们需要手动实现一个线程池; 2>.代码实现: Slf4j public class TestThreadPoolDemo1 {public static void main(String[] args) {/…

容器安全风险and容器逃逸漏洞实践

本文博客地址&#xff1a;https://security.blog.csdn.net/article/details/128966455 一、Docker存在的安全风险 1.1、Docker镜像存在的风险 不安全的第三方组件&#xff1a;用户自己的代码依赖若干开源组件&#xff0c;这些开源组件本身又有着复杂的依赖树&#xff0c;甚至…

在 Python 中只接受数字作为用户输入

只接受数字作为用户输入&#xff1a; 使用 while True 循环进行循环&#xff0c;直到用户输入一个数字。使用 float() 类尝试将值转换为浮点数。如果用户输入了一个数字&#xff0c;请使用 break 语句跳出循环。 while True:try:# &#x1f447;️ use int() instead of floa…

宝马项目化流程标准(BMW ABC flyer requirement)

ABC flyer/ BMWQMT build phase requirement宝马的项目流程标准叫做ABC flyer,也叫QMT build phase requirement.为什么叫这么名字&#xff0c;是因为宝马项目的产品零件分为几个阶段&#xff1a;A-samples, B-samples,C-samples, initial-samples.1、PVL/ VS0:100% ok parts i…

高通平台开发系列讲解(Android篇)AudioTrack音频流数据传输

文章目录 一、音频流数据传输通道创建1.1、流程描述1.2、流程图解二、音频数据传输2.1、流程描述2.2、流程图解沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要图解AudioTrack音频流数据传输 。 一、音频流数据传输通道创建 1.1、流程描述 AudioTrack在set函…

项目自动化构建工具make/Makefile

目录 make/Makefile概念和关系 make/Makefie的使用 一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的规则来指定&#xff0c;哪些文件需要先编译&#xff0c;哪些文件需要后编译&#xff0c;哪些文件需要重…

33岁测试宝妈,在家带娃一年半,入职新公司居然年薪30W+

疫情3年&#xff0c;每一个行业的危机&#xff0c;每一个企业的倒下&#xff0c;背后都是无数人的降薪、降职和失业。这也暴露了人生的残酷真相&#xff1a;人活一辈子&#xff0c;总有“丰年”和“荒年” 优秀的测试既过得了丰年&#xff0c;也受得住荒年。 我之前认识的一个…

零信任-Zscaler零信任介绍(7)

​Zscaler零信任介绍 Zscaler是一家专注于网络安全的公司&#xff0c;他们提供了一种名为Zscaler Zero Trust Exchange (ZTX)的零信任解决方案。这种解决方案旨在帮助企业提高网络安全&#xff0c;并确保只有授权的用户&#xff0c;设备和应用程序才能访问敏感信息。ZTX采用多…

畅购电商项目

1. 电商项目架构图技术框架/技术选型1.1 系统架构该项目是一个B2C的电商项目&#xff08;类似小米商城、京东商城、天猫商城&#xff09;允许客户通过网络购买商品该项目主要完成的是电商项目前台的开发。采用前后端分离的方式进行开发的前端&#xff1a;vue全家桶&#xff08;…

QT入门Containers之Widget、Frame

目录 一、QWidget界面相关 1、布局介绍 2、基本界面属性 3、特殊属性 二、QFrame 三、Demo展示 此文为作者原创&#xff0c;创作不易&#xff0c;转载请标明出处&#xff01; 一、QWidget界面相关 1、布局介绍 为什么将QWidget容器放在第一个&#xff0c;因为目前使用过…

前端缓存知识-强缓存与协商缓存

缓存的作用 减少了冗余的数据传输&#xff0c;节省了网费。减少了服务器的负担&#xff0c; 大大提高了网站的性能加快了客户端加载网页的速度 缓存分类 强制缓存如果生效&#xff0c;不需要再和服务器发生交互&#xff0c;而对比缓存不管是否生效&#xff0c;都需要与服务端…

查询蓝牙适配器版本

台式机不支持蓝牙&#xff0c;装了个蓝牙适配器&#xff0c;结果换来换去又忘记自己这个是啥版本了&#xff0c;适配器自己也不写。好在微软官方也给了说明如何查询我的电脑运行哪个蓝牙版本&#xff1f; - Microsoft 支持https://support.microsoft.com/zh-cn/windows/%E6%88%…