• Maven进阶-配置私服(Nexus 的使用)


    引言

    私服的配置也是企业开发中经常用到的,主要是为了协助多人或者多台设备的共同开发。

    我们知道 Maven 项目可以 install 到本地仓库,但是其他设备无法访问我们本地的仓库,我们需要将做好的模块部署(deploy)到一个服务器上,供其他设备下载使用。

    这时可以想到,Maven 的中央仓库做的就是这样的事情,也许我们可以把自己的项目上传到 Maven 中央仓库?

    确实可行但并不实用,因为中央仓库并不会随意供人上传文件,需要申请,另外中央仓库里的东西都是公开的,有时我们并不希望这样。

    所以私服就体现出了作用,私服可以作为中央管理系统来管理 Maven 依赖,一来它能供我们自由的上传和下载我们自己开发的项目,二来它能帮助我们下载中央仓库中的依赖。私服就成了属于我们自己的中央仓库,可以自由使用。

    本文借助 Nexus 工具来实现私服的搭建。

    一、Nexus 的下载

    官网下载地址:https://help.sonatype.com/repomanager3/product-information/download

    官网也许下载不了,需要翻墙

    网盘地址(3.31版本):https://pan.baidu.com/s/1oqUR_xmauprG-3V-PWHq-Q
    提取码:o8bg

    这篇文章里有其他版本的网盘地址:nexus3下载地址

    二、Nexus 启动服务器

    下载之后解压就好,无需安装

    解压之后有两个文件夹, nexus-3.31.1-01 和 sonatype-work,两个都有用,如下图:

    在这里插入图片描述

    进入 nexus-3.31.1-01\bin 目录下:

    在这里插入图片描述

    路径栏输入 cmd,回车打开命令行:

    在这里插入图片描述

    输入命令:nexus.exe /run nexus 回车:

    在这里插入图片描述

    等待片刻后,出现 Started Sonatype Nexus OSS 就完成了:

    在这里插入图片描述

    在命令行中按下 ctrl + c 即可正常关闭 Nexus,直接点 × 是强制关闭

    三、首次配置 Nexus

    服务器启动之后,浏览器访问 localhost:8081 即可打开管理页面:

    在这里插入图片描述

    点击右上角 Sign In 进行登录:

    在这里插入图片描述

    用户名为 admin,密码在 sonatype-work\nexus3\admin.password 文件中,用记事本打开文件,将里面的密码复制出来:

    在这里插入图片描述
    在这里插入图片描述

    登录成功之后会进行第一次启动的配置,点击 next:

    在这里插入图片描述

    重新设置 admin 用户的密码,需要输入两次,我先以 admin 作为密码设置:

    在这里插入图片描述

    是否允许匿名访问,若开启,任何人无需密码就能访问私服并下载文件,但没有管理权限,自己用怎么选都行,我先选择 Disable 禁止:

    在这里插入图片描述

    是否发送使用信息给开发者,怎么选都行,我先选 No 不发送:

    在这里插入图片描述

    完成了!点击 Finish:

    在这里插入图片描述

    四、新建仓库

    点击上方的齿轮进入设置,在点击 repositories 进入仓库设置:

    在这里插入图片描述

    如上图中可以看到,不同于本地仓库,私服中可以有多个仓库,且每一个仓库都有类别,此处简单说明一下这三种类别:

    • proxy:代理仓库,镜像其他的仓库,如 Maven 中央仓库
    • hosted:宿主仓库,用于存放我们上传的包
    • group:仓库组,联合了多个仓库,下载时指定仓库组即可,无需指定具体的仓库

    现在私服里有默认创建的一些仓库可以使用,不过我们来尝试自己创建仓库。

    对于项目的版本,通常有开发中的 SNAPSHOT(快照版本),和开发完成的 RELEASE(发布版本),通常为这两种版本的项目分别设置仓库,接下来我们试着创建 my-snapshot 和 my-release 两个仓库

    (如果你不想新建仓库,可以把已有的 maven-snapshot 和 maven-release 代替之后的 my-snapshot 和 my-release)

    首先创建 my-snapshot 仓库点击 Create repository:

    在这里插入图片描述

    选择 maven2(hosted) 仓库:

    在这里插入图片描述

    输入仓库名,并选择 Version policy 为 Snapshot,除此以外什么都不需要改:

    在这里插入图片描述

    点击页面底部的 Create repository 按钮即可:

    在这里插入图片描述

    同样的方法,来创建 my-release 仓库,这时需要选择 Version policy 为 Release:

    在这里插入图片描述

    五、设置仓库组

    前面说过,仓库组(group)是将几个仓库联合起来的组,下载包时只需要指定仓库组,就能找到需要的依赖,而不必指定具体的仓库

    比如将我们自己创建的仓库和 Maven 中央仓库联合,私服就能自己判断哪些包是我们上传的,而哪些需要去中央仓库下载

    我们直接用默认创建好 maven-public 仓库组来设置一下,将刚才创建的 my-snapshot 和 my-release 仓库添加到组内(自己创建仓库组也是可以的,需选择仓库类别为 maven2(group) )

    点击仓库组的名称 maven-public:

    在这里插入图片描述

    在页面底部,选择 my-snapshot 和 my-release 两个仓库(ctrl + 左键 可以多选),点击右箭头,或者直接拖拽到右侧,即可加入此仓库组

    在这里插入图片描述

    点击 Save 保存即可:

    在这里插入图片描述

    六、仓库的 URL

    Maven 通过 url 定位 仓库或者仓库组,点开一个仓库(组)即可看到它的 url:

    在这里插入图片描述

    或者点击 仓库列表中 URL 列的 copy 按钮:

    在这里插入图片描述

    七、Maven 的配置

    1、配置 mirror

    mirror 是 Maven 下载依赖时访问的镜像,我们将私服中的仓库组 maven-public 作为镜像

    打开 maven 的目录下的 conf\setting.xml 文件,找到 mirrors 标签,添加一个 mirror,表示下载依赖时访问的仓库组:

    <mirrors>
      <mirror>
        <id>maven-publicid> 	
        <mirrorOf>*mirrorOf>	
        <name>nexus mavenname>	
        <url>http://localhost:8081/repository/maven-public/url>	
      mirror>
    mirrors>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    2、配置 server

    server 是 Maven 上传包时访问的服务器中的仓库,配置 server 不需要仓库的 URL,因为我们会在项目的 pom.xml 中配置

    打开 maven 的目录下的 conf\setting.xml 文件,找到 servers 标签,添加两个 server,分别表示我们自己创建的 my-snapshot 和 my-release 两个仓库:

    <servers>
      <server>
        <id>my-snapshotid>	
        <username>adminusername>	
        <password>adminpassword>	
      server>
      
      <server>
        <id>my-releaseid>
        <username>adminusername>
        <password>adminpassword>
      server>
    servers>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    八、打包上传

    上传的项目 pom.xml 文件中需要设置 distributionManagement 标签,如下:

    <distributionManagement>
        <repository>	
            <id>my-releaseid>	
            <url>http://localhost:8081/repository/my-release/url>	
        repository>
        <snapshotRepository>	
            <id>my-snapshotid>
            <url>http://localhost:8081/repository/my-snapshot/url>
        snapshotRepository>
    distributionManagement>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    distributionManagement 有 repository 和 snapshotRepository,分别表示 release 和 snapshot 两个版本上传的两个仓库,上传到哪个仓库取决于项目的 version 版本号后面有没有 SNAPSHOT

    在这里插入图片描述

    如上图中这个简单的小项目,它的坐标是 com.mzz,版本是 1.0-SNAPSHOT

    用命令 mvn deploy 构建项目并上传,看到 BUILD SUCCESS 就成功了

    在这里插入图片描述

    可以看出这个项目上传到了 my-snapshot 仓库,因为现在项目版本号是 1.0-SNAPSHOT,如果想上传到 my-release 仓库,只需去掉版本号后的 SNAPSHOT 或者将 SNAPSHOT 改成 RELEASE 即可

    在模块间的继承关系中,在父模块中设置 distributionManagement 会继承给子模块

    九、查看仓库

    点击上方的方格按钮,再点击左侧的 Browse,在仓库列表中点击要查看的仓库名称即可

    在这里插入图片描述在这里插入图片描述

    十、修改中心仓库代理地址

    修改中心仓库的代理地址为阿里云,点击 maven-central 仓库:

    在这里插入图片描述

    修改 Remote storage 为 https://maven.aliyun.com/repository/public,如下图:

    在这里插入图片描述

    到页面最下方 Save 保存即可

    十一、修改端口号

    nexus 默认的端口号是 8081,如果想要修改,在 sonatype-work\nexus3\etc 路径下,打开 nexus.properties 文件,修改 application-port 的值,取消注释即可:

    在这里插入图片描述

  • 相关阅读:
    MTX-Ovalbumin 甲氨蝶呤修饰卵清蛋白 Methotrexate-Ovalbumin
    JAVA:实现Harshad Number哈沙德数算法(附完整源码)
    那些项目中遇到的注解
    Linux 进程管理 实时调度类及SMP和NUMA
    一家公司做了两年软件测试,只会功能测试,现在已经感到危机感了,那如何摆脱困境呢?
    重装系统后笔记本电脑无线wifi怎么连接
    go radix tree
    React状态与引用(Refs)- 差异和使用场景
    产品经理的API文档阅读指南
    7.Docker 常规软件安装
  • 原文地址:https://blog.csdn.net/Cey_Tao/article/details/126646170