nexus私服知识概括

Posted GeorgeLin98

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nexus私服知识概括相关的知识,希望对你有一定的参考价值。

nexus私服简介

私服:

  • 私服也是远程仓库中的一种,我们为什么需要私服呢?
  • 如果我们一个团队中有几百个人在开发一些项目,都是采用maven的方式来组织项目,那么我们每个人都需要从远程仓库中把需要依赖的构件下载到本地仓库,这对公司的网络要求也比较高,为了节省这个宽带和加快下载速度,我们在公司内部局域网内部可以架设一台服务器,这台服务器起到一个代理的作用,公司里面的所有开发者去访问这个服务器,这台服务器将需要的构件返回给我们,如果这台服务器中也没有我们需要的构件,那么这个代理服务器会去远程仓库中查找,然后将其先下载到代理服务器中,然后再返回给开发者本地的仓库。
  • 还有公司内部有很多项目之间会相互依赖,你可能是架构组的,你需要开发一些jar包给其他组使用,此时,我们可以将自己jar发布到私服中给其他同事使用,如果没有私服,可能需要我们手动发给别人或者上传到共享机器中,不过管理起来不是很方便。
  • 总体上来说私服有以下好处:
    ①加速maven构件的下载速度
    ②节省宽带,加速项目构建速度
    ③方便部署自己的构件以供他人使用
    ④提高maven的稳定性,中央仓库需要本机能够访问外网,而如果采用私服的方式,只需要本机可以访问内网私服就可以了

私服软件:

  • 有3种专门的maven仓库管理软件可以用来帮助我们搭建私服:
    ①Apache基金会的archiva
    ②JFrog的Artifactory
    ③Sonatype的Nexus
  • 这些都是开源的私服软件,都可以自由使用。用的最多的是第三种Nexus。

Nexus仓库分类

简介:

  • nexus中有个仓库列表,里面包含了各种各样的仓库,下图中是nexus安装好默认自带的仓库列表,主要有3种类型:
    ①代理仓库
    ②宿主仓库
    ③仓库组
    在这里插入图片描述
  • 代理仓库:代理仓库主要是让使用者通过代理仓库来间接访问外部的第三方远程仓库的,如通过代理仓库访问maven中央仓库、阿里的maven仓库等等。代理仓库会从被代理的仓库中下载构件,缓存在代理仓库中以供maven用户使用。默认从https://repo1.maven.org/maven2/拉取jar。
  • 宿主仓库:宿主仓库主要是给我们自己用的,主要有2点作用:
    ①将私有的一些构件通过nexus中网页的方式上传到宿主仓库中给其他同事使用
    ②将自己开发好一些构件发布到nexus的宿主仓库中以供其他同事使用
  • 仓库组:
    ①maven用户可以从代理仓库和宿主仓库中下载构件至本地仓库,为了方便从多个代理仓库和宿主仓库下载构件,maven提供了仓库组,仓库组中可以有多个代理仓库和宿主仓库,而maven用户只用访问一个仓库组就可以间接的访问这个组内所有的仓库,仓库组中多个仓库是有顺序的,当maven用户从仓库组下载构件时,仓库组会按顺序依次在组内的仓库中查找组件,查找到了立即返回给本地仓库,所以一般情况我们会将速度快的放在前面。
    ②仓库组内部实际上是没有构件内容的,他只是起到一个请求转发的作用,将maven用户下载构件的请求转发给组内的其他仓库处理。nexus默认有个仓库组maven-public。

配置本地Maven从nexus下载构件(pom.xml的方式):

  • 修改pom.xml,加入如下内容:
<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>

配置本地Maven从nexus下载构件(镜像方式):

  • setting.xml的mirrors元素中加入如下配置:
<mirror>
  <id>mirror-nexus</id>
  <mirrorOf>*</mirrorOf>
  <name>nexus镜像</name>
  <url>http://localhost:8081/repository/maven-public/</url>
</mirror>
  • 由于nexus的url是需要用户名和密码才可以访问的,所以需要配置访问凭证,在~/.m2/settings.xml文件的servers元素中加入如下内容:
<server>
  <id>mirror-nexus</id>
  <username>admin</username>
  <password>admin123</password>
</server>

本地构件发布到私服:

  • 使用maven部署构件至nexus私服:
    ①我们创建maven项目的时候,会有一个pom.xml文件,里面有个version元素,这个是这个构件的版本号,可以去看一下上面我们刚创建的maven-chat05,默认是1.0-SNAPSHOT,这个以-SNAPSHOT结尾的表示是个快照版本,叫做SNAPSHOT版本,快照版本一般是不稳定的,会反复发布、测试、修改、发布。而最终会有一个稳定的可以发布的版本,是没有-SNAPSHOT后缀的,这个叫做release版本。
    而nexus私服中存储用户的构件是使用的宿主仓库,这个我们上面也有说过,nexus私服中提供了两个默认的宿主仓库分别用来存放SNAPSHOT版本和release版本。
    ③步骤:
    <1>修改pom.xml配置
    <2>修改settings.xml
    <3>执行mvn deploy命令

  • 手动部署第三方构件至nexus私服:比如我们第三方发给我们的一个包,比如短信发送商的jar包,这个包远程仓库是不存在的,我们要把这个包上传到私服供所有开发使用。
    ①手动上传只支持发布稳定版本的构件

nexus注意点

maven snapshot和release版本号之间的差别:

  • 在使用maven过程。我们经常会在不稳定的状态有很多公共图书馆在发展阶段。需要改变在任何时间和公布,你可能有一天一次发布。经验bug时间,甚至一天公布N次要。我们知道,。maven依赖管理是基于管理的版本号,对于发布状态artifact,假设相同的版本号,即使是我们内部的镜子server上的组件比本地新,maven也不会主动下载的。
  • 假设我们在开发阶段都是基于正式公布版本号来做依赖管理,那么遇到这个问题。就须要升级组件的版本号号,可这样就明显不符合要求和实际情况了。可是,假设是基于快照版本号,那么问题就自热而然的攻克了,而maven已经为我们准备好了这一切。
  • maven中的仓库分为两种,snapshot快照仓库和release公布仓库。
    ①snapshot快照仓库用于保存开发过程中的不稳定版本号,release正式仓库则是用来保存稳定的发行版本号。定义一个组件/模块为快照版本号,仅仅须要在pom文件里在该模块的版本号号后加上-SNAPSHOT就可以(注意这里必须是大写),例如以下:
<groupId>cc.mzone </groupId>
<artifactId>m1 </artifactId>
<version>0.1-SNAPSHOT </version>
<packaging>jar </packaging>
  • maven会依据模块的版本号号(pom文件里的version)中是否带有-SNAPSHOT来推断是快照版本号还是正式版本号。假设是快照版本号,那么在mvn deploy时会自己主动公布到快照版本号库中,而使用快照版本号的模块,在不更改版本号号的情况下。直接编译打包时,maven会自己主动从镜像server上下载最新的快照版本号。
  • 假设是正式公布版本号,那么在mvn deploy时会自己主动公布到正式版本号库中。而使用正式版本号的模块。在不更改版本号号的情况下,编译打包时假设本地已经存在该版本号的模块则不会主动去镜像server下载。
  • 所以,我们在开发阶段,公共图书馆的版本号可以设置为快照版本。是依赖组件被引用的快照版本开发。快照版本更新的公共图书馆后。我们并不需要改变pom文件版本号提示下载新的版本号,直接mvn编译相关的操作、包装命令可以重新下载最新的快照库,从而促进我们的发展。
  • 总结:如果是release版本,首先从本地查找,如果有,则使用本地,否则从远程服务器下载。 因为,本地已存在,所以不会更新。所以,只有删除本地,才能更新到最新。 为了更新不再删除,改了jar的版本号,将jar包的版本号改为2.5.2-SNAPSHOT,同时修改依赖的版本号,就能下载到最新版本了。

LATEST版本:

  • 最新版本,则是发布版和快照中,最新的版本,所以,如果version配置为latest,则版本也不是稳定的。

maven发布部署到私服的依赖:

  • 发布snapshot的包到nexus会自动带时间戳

  • 设置deploy参数-DuniqueVersion=false,可以取消带时间戳。

  • 在setting.xml

<server>    
  <id>nexus-releases</id>    
  <username>admin</username>    
  <password>admin123</password>    
</server>    
<server>    
  <id>nexus-snapshots</id>    
  <username>admin</username>    
  <password>admin123</password>    
</server>  
  • 在待deploy的pom.xml设置,maven默认的时区为UTC如果需要设置GMT+8,请使用其他插件。格式化时间戳:
<maven.build.timestamp.format>yyyyMMdd</maven.build.timestamp.format>
  • 设置jar包名称:
<build> 
	<finalName>${artifactId}-${version}-${maven.build.timestamp}</finalName>
</build>
  • 设置war包名称:
<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <warName>manage-${version}</warName>
    </configuration>
</plugin>
  • 在pom.xml设置:
<distributionManagement>
    <repository>
        <id>nexus-releases</id>
        <name>internal releases</name>
        <url>http://10.250.0.64:8081/nexus/content/repositories/releases</url>
    </repository>
    <snapshotRepository>
        <id>nexus-snapshots</id>
        <name>internal snapshot</name>
        <url>http://10.250.0.64:8081/nexus/content/repositories/snapshots</url>
        <uniqueVersion>false</uniqueVersion>
    </snapshotRepository>
</distributionManagement>

快照与稳定版本总结:

  • 快照版本用于开发,可以不用修改版本号就进行发布,便于开发,使用jar包之间的时间戳区别出最新版本。
  • 稳定版本用于生产线,必须要修改版本号才能发布。

nexus总结

总结:

以上是关于nexus私服知识概括的主要内容,如果未能解决你的问题,请参考以下文章

服务器搭建npm私服

基于本地仓库搭建nexus私服

基于本地仓库搭建nexus私服

基于本地仓库搭建nexus私服

基于本地仓库搭建nexus私服

批量导入Npm包依赖到Nexus私服(批量上传脚本)