nexus私服仓库操作和使用手册

一 操作手册

1

配置Nexus之前,需要先了解一下私服的工作原理,如下图
nexus10.png

找依赖包的流程: 首先在本地仓库中找,如果没命中,那么就找远程私服;远程私服的查找规则同样是先找host属性的私有库,然后再去找proxy属性的远程仓库;可以配置多个proxy;

2 Nexus仓库类型介绍

默认安装有以下这几个仓库,在控制台也可以修改远程仓库的地址,第三方仓库等。

  • hosted(宿主仓库库) :存放本公司开发的jar包(正式版本、测试版本)

  • proxy(代理仓库):代理中央仓库、Apache下测试版本的jar包

  • group(组仓库):使用时连接组仓库,包含Hosted(宿主仓库)和Proxy(代理仓库)

3 分组仓库的配置**

nexus11.png

如上图所示,maven-public就我创建的组仓库。以及还创建了3个代理仓库,如下。

3.1、jCenter阿里云仓库**:http://maven.aliyun.com/nexus/content/groups/public/

neuxs12.png

3.2、maven中央仓库**:https://repo1.maven.org/maven2/

neuxs13.png

3.3 最后建立组仓库maven-public

neuxs14.png

  • 组仓库中包含了

    • jcenter

    • maven-central

    • 本地maven-releases

    • 本地maven-snapshots。`

至此,Nexus基本就这么配置好了,主要在Group组中配置一个代理私服

3.4 第三步:配置下载依赖 setting.xml

添加maven仓库镜像
创建好组仓库之后,修改setting.xml文件,添加maven仓库镜像,如下

<mirror>
  <id>nexus-myself</id>
  <!--*指的是访问任何仓库都使用我们的私服-->
  <mirrorOf>*</mirrorOf>
  <name>Nexus myself</name>
  <url>http://192.168.124.29:8081/repository/maven-public/</url>
</mirror>

3.5 全局配置下载依赖(即项目pom无需配置)**

在maven的setting.xml文件中配置私服配置,这种方式配置后所有本地使用该配置的maven项目的pom文件都无需配置私服下载相关配置。

<profiles>
  <profile>
     <id>mycof</id>
        <repositories>
        <!-- 私有库地址-->
          <repository>
          <id>nexus</id>
          <url>http://192.168.124.29:8081/repository/maven-public/</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>      
      <pluginRepositories>
        <!--插件库地址-->
        <pluginRepository>
          <id>nexus</id>
          <url>http://192.168.124.29:8081/repository/maven-public/</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
           </snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile> 

3.6 激活使用上面的配置**

<!--激活profile-->
<activeProfiles>
  <activeProfile>mycof</activeProfile>
</activeProfiles>

3.7 单独项目下载依赖(即项目pom文件中配置)**

这种配置是修改单个项目的pom文件,无需修改maven的setting配置

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

建议使用全局的setting配置,一个项目组共用一个maven的setting配置,项目中就无需配置下载相关的私服仓库配置

4 第四步:上传jar包配置**

  • 对于中央仓库没有的jar包,需要我们自己将jar包发布到私服中去,其中jar包主要分为两类,

    • 一类是本地自己开发供给项目组其余同事使用,这种直接配置项目的pom文件和maven的setting文件,之后deploy发布即可发布到;

    • 另一类是第三方jar包,可以直接使用web页面上传并设置对应GAV即可;

本地maven开发的项目上传配置

4.1.maven的setting文件配置**

这里要配置配置上传用户及仓库信息,我这里直接使用了admin用户,在nenus2.x中还内置了一个deployment/deployment123用户,在3.x该用户被移除了,这里可以自己配置角色和用户,我就直接使用admin用户了

<servers>
    <server>  
        <id>maven-releases</id>  
        <username>admin</username>  
        <password>admin123</password>  
    </server>  
    <server>  
        <id>maven-snapshots</id>  
        <username>admin</username>  
        <password>admin123</password>  
    </server>
  </servers>

4.2.项目中的pom文件配置**

   <distributionManagement>
        <repository>
            <id>maven-releases</id>
            <name>Nexus Release Repository</name>
            <url>http://192.168.124.29:8081/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>maven-snapshots</id>
            <name>Nexus Snapshot Repository</name>
            <url>http://192.168.124.29:8081/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

4.3.执行maven的deploy命令**

这是myeclipse中上传本地项目jar到私服,IDEA中更为简单直接点击maven周期中的deploy即可

nexus16.png
出现uploading信息并且没报错说明上传成功。

4.4 然后到对应的仓库中查看**

nexus17.png

注意:

  • 这里只有Snapshot的仓库上传成功,Release仓库并没有上传成功,这是因为版本号名称结尾有SNAPSHOT,默认以这个结尾是不会上传到Release仓库去的,去除就会上传到Release仓库且不会上传到快照仓库

  • Release仓库默认不支持重复发布,可配置

  • 注意setting中server标签下的id要和pom文件中仓库配置的id相同,即指定上传到哪个仓库

5 第三方jar包上传**

对于第三方jar包的上传采用nenus提供的web界面上传,上传成功后需要使用该jar包的话,依赖中填写自定义的GAV即可

nexus18.png二 使用手册

2.1 配置管理员

配置管理员0.png配置管理员.png配置管理员3.png注意下面几点说明:

1.component name的一些说明:

  • 1)maven-central:maven中央库,默认从https://repo1.maven.org/maven2/拉取jar

  • 2)maven-releases:私库发行版jar

  • 3)maven-snapshots:私库快照(调试版本)jar

  • 4)maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用。

2.Nexus默认的仓库类型有以下四种:

  • 1)group(仓库组类型):又叫组仓库,用于方便开发人员自己设定的仓库;

  • 2)hosted(宿主类型):内部项目的发布仓库(内部开发人员,发布上去存放的仓库);

  • 3)proxy(代理类型):从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值即被代理的远程仓库的路径);

  • 4)virtual(虚拟类型):虚拟仓库(这个基本用不到,重点关注上面三个仓库的使用);

3.Policy(策略)

表示该仓库为发布(Release)版本仓库还是快照(Snapshot)版本仓库;

4.Public Repositories下的仓库

  • 1)3rd party: 无法从公共仓库获得的第三方发布版本的构件仓库,即第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去;

  • 2)Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库

  • 3)Central: 用来代理maven中央仓库中发布版本构件的仓库

  • 4)Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库

  • 5)Codehaus Snapshots: 用来代理CodehausMaven 仓库的快照版本构件的仓库

  • 6)Releases: 内部的模块中release模块的发布仓库,用来部署管理内部的发布版本构件的宿主类型仓库;release是发布版本;

  • 7)Snapshots:发布内部的SNAPSHOT模块的仓库,用来部署管理内部的快照版本构件的宿主类型仓库;snapshots是快照版本,也就是不稳定版本

  • 所以自定义构建的仓库组代理仓库的顺序为:Releases,Snapshots,3rd party,Central。也可以使用oschina放到Central前面,下载包会更快。

5.Nexus默认的端口是8081,

vim etc/nexus-default.properties

6.Nexus默认的用户名密码是admin/admin1236.

7.当遇到奇怪问题时,重启nexus,重启后web界面要1分钟左右后才能访问

8.Nexus的工作目录是sonatype-work(路径一般在nexus同级目录下)

2.2 创建仓库

Nexus有3个类型的数据仓库

分别是hosted,proxy,group。

  • hosted 宿主仓库:主要用于部署无法从公共仓库获取的构件以及自己或第三方的项目构件;

  • proxy 代理仓库:代理公共的远程仓库;

  • group 仓库组:Nexus 通过仓库组统一管理多个仓库,这样我们在项目中直接请求仓库组即可请求到仓库组管理的多个仓库。

在登录之后,

创建仓库1.png创建仓库2.png创建仓库3.png创建仓库4.png创建仓库6.png创建仓库5.png创建成功之后再主页能够看到自己创建的仓库

2.3 上传仓库

参考连接:https://www.jianshu.com/p/f54712ca6e20

与AS关联,并将依赖库上传到仓库

1-为了方便管理,在需要上传的依赖库中创建一个新gradle文件进行配置如下:

上传仓库1.png

2-下图是gradle.properties的配置信息:

上传仓库2.png3-要让自己配置的gradle起作用,需要在依赖库自身的gradle中配置关联如下代码:

applyfrom:’./upload_archives.gradle’

4-接下来就是上传操作了,已经检验操作了

(在自己创建的仓库中找得到上传的项目就表示成功),看图说话:

上传仓库3.png上传仓库4.png

5-前提,在工程目录下中的gradle添加nexus引用

maven{url'http://localhost:8081/repository/wyw/'}
(依赖地址为之前创建的地址,实际开发中,将localhost换成服务器地址),就和普通的依赖添加一样操作,在需要使用该库的module中添加:
compile'common:toastutils-lib:1.0.0'。

2.4 maven中配置私服

编辑setting.xml

<servers>
    <server>
    <!--这是server的id(注意不是用户登陆的id),该id与distributionManagement中repository元素的id相匹配。 -->
      <id>nexus</id>
      <username>admin</username>
      <password>admin123</password>
     </server>
</servers>

<!--为仓库列表配置的下载镜像列表。  -->
<mirrors>
    <mirror>
        <!--该镜像的唯一标识符。id用来区分不同的mirror元素。  -->
        <id>nexus</id>
        <!--此处配置所有的构建均从私有仓库中下载 *代表所有,也可以写central -->
        <mirrorOf>*</mirrorOf>
        <name>central repository</name>
        <!--该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。  -->
        <url>http://127.0.0.1:8081/repository/maven-public/</url>
    </mirror>
</mirrors>

<profiles>
  <profile>
      <id>nexus</id>
      <!--远程仓库列表,它是Maven用来填充构建系统本地仓库所使用的一组远程项目。  -->
      <repositories>
          <!--发布版本仓库-->
          <repository>
              <id>nexus</id>      
              <!--地址是nexus中repository(Releases/Snapshots)中对应的地址-->
              <url>http://127.0.0.1:8081/repository/maven-public/</url>
          <!--true或者false表示该仓库是否为下载某种类型构件(发布版,快照版)开启。 -->
          <releases>
              <enabled>true</enabled>
          </releases>
          <snapshots>
              <enabled>true</enabled>
          </snapshots>
      </repository>
      </repositories>
  </profile>     
</profiles>

<!--激活配置-->
<activeProfiles>
    <!--profile下的id-->
    <activeProfile>nexus</activeProfile>
</activeProfiles>

2 通过命令行上传jar到nexus

mvn deploy:deploy-file -DgroupId=com.sgcc.ams -DartifactId=ams-base -Dversion=1.7.0 -Dpackaging=jar -Dfile=C:\develop\lib\ams-base-1.7.0.jar -Durl=http://127.0.0.1:8081/repository/maven-releases/ -DrepositoryId=nexus

3 在项目中配置私服,pom.xml中添加

<!--上传到nexus仓库中,配合mvn deploy:deploy-->
<distributionManagement>
    <repository>
        <id>nexus</id>
        <name>Nexus snapshots Repository</name>
        <!--snapshots仓库 -->
        <url>http://127.0.0.1:8091/repository/maven-snapshots/</url>
    </repository>
</distributionManagement>