ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Mvaen系列第5篇:私服详解(本文内容来自 路人甲java)

2020-06-15 10:52:26  阅读:370  来源: 互联网

标签:xml java nexus 私服 maven 仓库 路人甲 构件


1、私服介绍

2、windows中安装nexus私服

3、nexus私服中各种仓库详解

4、配置本地Maven从nexus下载构件

5、将本地构件发布到私服的2种方式详解

私服

  私服也是远程仓库中的一种,我们为什么需要私服呢?

  如果我们一个团队中有几百个人在开发一些项目,都是采用maven的方式来组织项目,那么我们每个人都需要从远程仓库中把需要依赖的构件下载到本地仓库,这对公司的网络要求也比较高,为了节省这个宽带和加快下载速度,我们在公司内部局域网内部可以架设一台服务器,这台服务器起到一个代理的作用,公司里面的所有开发者去访问这个服务器,这台服务器将需要的构件返回给我们,如果这台服务器中也没有我们需要的构件,那么这个代理服务器会去远程仓库中查找,然后将其先下载到代理服务器中,然后再返回给开发者本地的仓库。

  还有公司内部有很多项目之间会相互依赖,你可能是架构组的,你需要开发一些jar包给其他组使用,此时,我们可以将自己jar发布到私服中给其他同事使用,如果没有私服,可能需要我们手动发给别人或者上传到共享机器中,不过管理起来不是很方便。

  总体来说私服有以下好处:

  1、加速maven构件的下载速度

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

  3、方便部署自己的构建以供他人使用

  4、提高maven的稳定性,中央仓库需要本机能够访问外网,而如果采用私服的方式,只需要本机可以访问内网私服就可以了

 有3种专门的maven仓库管理软件可以帮助我们搭建私服:

  1、Apache基金会的archiva

    http://archiva.apache.org/

  2、JFrog的Artifactory

    https://jfrog.com/artifactory/

  3、Sonatype的nexus

    https://my.sonatype.com/

  都是开源的软件,可以自由使用。用的最多是nexus,本文我们主要使用nexus

Windows10中安装Nexus私服

  nexus是java开发的,所以运行的时候需要有java环境的支持

  安装jdk,请自行解决

  下载nexus:

    一、官网下载:地址:https://help.sonatype.com/repomanager3/download

    二、百度网盘下载,地址:

        链接:https://pan.baidu.com/s/1N8A4JH1Ykvetn3xs05LszA 
        提取码:vig6

  解压latest-win64.zip

    

  启动nexus:cmd中直接运行nexus-3.19.1-01/bin/nexus.exe /run  ,如下:

    D:\installsoft\maven\nexus\nexus-3.19.1-01\bin>nexus.exe /run

  如果输出中出现了下面异常请忽略:

    java.io.UnsupportedEncodingException: Encoding GBK is not supported yet (feel free to submit a patch)

  浏览器中打开
    http://localhost:8081/

  效果如下:

    

  登录Nexus

  点击上图右上角的Sign in,输入用户名和密码,用户名默认为admin,

  nexus这个版本的密码是第一次启动的时候生成的,密码该文件中:安装目录/sonatype-work/nexus3/admin.password

  登录成功后会弹出一些设置,如下:
    

 

              

 

   其他一些常见的操作:

    停止Nexus的命令:在启动的cmd窗口中按  ctrl+c

    修改启动窗口:默认端口 8081,修改端口的文件,nexus-3.19.1-01\etc\nexus-default.properties

Nexus中仓库分类:

   前面我们说过,用户可以通过nexus|访问远程仓库,可以发布自己的构件到nexus中,nexus是如何支撑这些操作的呢?

    nexus中有个仓库列表,里面包含了各种各样的仓库,有我们说的被代理的第三方远程仓库,如下图:

    

  图中是nexus安装好默认自带的仓库列表,主要有3中类型:

    1、代理仓库

    2、宿主仓库

    3、仓库组

  代理仓库

    代理仓库主要是让使用者通过代理仓库间接访问第三方远程仓库的,如通过代理仓库访问maven中央仓库、阿里的maven仓库等。代理仓库会从被代理的仓库下载构件,缓存在代理仓库中,供maven用户使用。

    我们在nexus中创建一个阿里云的maven代理仓库来看下过程。

    

        

      

  宿主仓库:

    宿主仓库就是我们自己用的,主要作用有两点

      1、将私有的一下构件通过nexus中网页的方式上传到宿主仓库以供给其他同事使用

      2、将自己开发好的一些构件发布到nexus的宿主仓库中以供其他同事使用

          上面这2种操作,一会稍后会详解以及演示操作过程。

  仓库组:

    maven用户可以从代理仓库和宿主仓库中下载构件到本地仓库,为了方便从多个代理仓库和宿主仓库下载构件,maven提供了仓库组,仓库组中可以有多个代理仓库和宿主仓库,而maven用户只用访问一个仓库组就可以间接的访问这个组内所有的仓库,仓库组中多个仓库是有顺序的,当maven用户从仓库组下载构件时,仓库组会按顺序依次在组内的仓库中查找组件,查找到了立即返回给本地仓库,所以一般情况我们会将速度快的放在前面。

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

    

      

    

配置本地Maven从nexus下载构件

    介绍两种方式

    方式一:pom.xml的方式

    

    修改pom.xml,加入如下内容:

    注意下面url的地址为上面复制的地址。  

<repositories>
    <repository>
        <id>maven-nexus</id>
        <url>http://localhost:8081/repository/maven-public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

     由于nexus私服需要有用户名和密码才能登录访问,所以需要有凭证,凭证需要有settings.xml文件中配置,在~/.m2/settings.xml文件的servers元素中加入如下内容:

<server>
  <id>maven-nexus</id>
  <username>admin</username>
  <password>admin123</password>
</server>

     注意上面的server->id的值和pom.xml中repository->id的值一致,通过这个id关联找到凭证的。

    创建项目,在项目的文件按上边配置,在项目目录中打开cmd运行:mvn compile

    从输出中可以看出fastjson这个jar包从maven-nexus中下载了,下载地址正是我们nexus私服中的那个地址。

    方式2:镜像方式

      镜像方式主要在settings.xml文件中设置,做两处改动:

                     第一处:settings.xml中的mirror元素中加入下边配置:

                                <mirror>

            <id>mirror-nexus<id/>

            <mirrorof>*<mirrorof/>

            <name>nexus镜像<name/>

            <url>http://localhost:8081/repository/maven-public</url>

          </mirror>

       url是仓库组的地址,获取方式一中说过

    第二处:nexus的url是需要用户名和密码才能访问的,所以需要配置访问凭证,在settings.xml`文件的`servers`元素中加入如下内容: 

        <server>

          <id>mirror-nexus<id/>

          <username>admin<username/>

          <password>admin123<password/>

        <server/>

      注意:server->id是和mirror->id是一致的,这样才能找到对应的凭证

    测试运行和方法一样

本地构件发布到私服

   经常用到两种方式:

    1、使用maven部署构建到nexus私服

    2、手动部署第三方构件到nexus私服

   使用maven部署构建到nexus私服

    我们创建maven项目时,会有一个pom.xml文件,里边有个version元素,这个是这个构件的版本号,刚创建的项目,版本默认为1.0-snapshot,-snapshot为快照版本,快照版本是不稳定的,需要进行反复的发布,测试,修改,发布,最终得到一个最终版本,该版本中是没有-snapshot的,这个叫做release.

    而nexus私服中存储用户构件的是宿主仓库,nexus私服中提供了两个默认的宿主仓库来分别存放snapshot版本和release版本。

    操作分为三步:

    第一步:修改pom.xml配置

    我们需要将本地maven项目中的构件发布出去,需要在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

      nexus的仓库地址需要登录才能访问,所以需要配置凭证,在settings文件中的servers元素中加入:

<server>
  <id>release-nexus</id>
  <username>admin</username>
  <password>admin123</password>
</server>

<server>
  <id>snapshot-nexus</id>
  <username>admin</username>
  <password>admin123</password>
</server>

     注意上面第1个server->id的值需要和pom.xml中的distributionManagement->repository->id的值一致。

     第2个server->id的值需要和pom.xml中的distributionManagement->snapshotRepository->id的值一致。

    第三步:执行`mvn deploy`命令

    执行这个命令的时候,会对构件进行打包,然后上传到私服中。

    这命令的原理,后面的文章中会具体介绍。

    示例效果

    我们来感受一下效果。

    按照上面的配置修改pom.xml文件和本地的~/.m2/settings.xml文件。

    项目目录中打开cmd运行:

       mvn deploy

     然后到私服中进行查看,访问快照宿主仓库的地址:

    http://localhost:8081/repository/maven-snapshots/

     出现如下页面:

    点击上面bowse连接,如出现下图,构件就上传成功:

  

       release版本的发布过程和snapshot版本一样,只要将pom文件中的version元素中的-snspshot删除

  手动部署构件至nexus私服

  操作步骤

    手动上传只能发布稳定版本的构件

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:xml,java,nexus,私服,maven,仓库,路人甲,构件
来源: https://www.cnblogs.com/fbbg/p/13113393.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有