• 使用Docker搭建Nexus私有仓库


    前言

    最近项目需要对接银行系统,对方提供了一些jar包,这些三方jar是没有上传到中央仓库的,所以无法直接在maven中依赖,因此决定搭建一个Maven私服来处理。

    maven仓库的使用结构如下图:

    通常,我们开发项目并没有使用到虚线标识的那两部分,基本都是通过本机的Maven直接访问中央仓库,下载jar包到本地仓库。现在我们需要搭建中间虚线部分。

    一、docker安装nexus

    1、下载镜像

    官方镜像地址:https://hub.docker.com/r/sonatype/nexus3/tags
    #docker pull sonatype/nexus3 //下载镜像

    2、安装

    #mkdir /usr/local/docker/nexus //新建目录
    #chmod 777 /usr/local/docker/nexus //修改权限
    
    //nexus默认使用8081端口
    #docker run -d --restart=always -p 8081:8081 --name nexus -v /usr/local/docker/nexus:/nexus-data sonatype/nexus3

    3、nexus密码

    安装完成后可访问管理平台:http://ip:8081
    默认管理员用户名:admin 密码:admin123

    如果提示密码不对,需要到容器里面去修改密码。方式如下:

    //进入容器
    #docker exec -it nexus /bin/bash
    
    //进入/opt/sonatype/sonatype-work/sonatype-work/目录,找到admin.password文件,里面的内容就是密码
    #cat admin.password

    红色部分就是admin的密码。这个只是临时密码,修改密码后admin.password文件会消失。

    二、配置nexus

    登录nexus管理平台后(注意必须admin登录才行,不然只能浏览模式),可以看到如下界面:

    1、创建Blob stores

    在创建repository之前,还需要先指定文件存储目录,便于统一管理。就需要创建Blob stores

    创建好后可以看到blob stores有两个,一个是系统默认的,一个是刚创建的。如果不想自己创建,使用系统默认的文件存储目录(在sonatype-work/nexus3/blobs)也是可以的。到时候创建repository时,存储目录选择default就可以了。

    2、nexus仓库

    如图所示,代理仓库负责代理远程中央仓库,托管仓库负责本地资源,组资源库 = 代理资源库 + 托管资源库。

    3、创建proxy repository代理仓库

    选择maven2(proxy),代理仓库

    设置代理仓库

    其他的可以采用默认,以后需要修改的可以再修改。

    4.创建hosted repository仓库

     

    上图的Hosted设置选项,选项中有三个值:
    **Allow redeploy**:允许同一个版本号下重复提交代码, nexus以时间区分
    **Disable redeploy**:不允许同一个版本号下重复提交代码
    **Read-Only**:不允许提交任何版本
    原生的maven-releases库是Disable redeploy设置, maven-snapshots是Allow redeploy。

    5、创建group repository组仓库

     将hosted repositories宿主仓库的顺序放在proxy repositories代理仓库之前,因为一个group仓库组中可以包括宿主仓库和代理仓库。而整个group repository是作为一个public repository给用户使用的。

    所以当查找jar包的时候,如果代理资源库在前面,那就是先从远程去查找jar包,而不是先从宿主仓库(本地仓库)去查找jar包。

    三、设置maven

    Maven下的setting.xml文件和项目中的pom.xml文件的关系是:settting.xml文件是全局设置,而pom.xml文件是局部设置。pom.xml文件对于项目来说,是优先使用的。而pom.xml文件中如果没有配置镜像地址的话,就按照settting.xml中定义的地址去查找。

    1、修改maven配置文件setting.xml

    如上图方式获取组仓库smart_group的仓库地址,修改setting.xml文件如下:

      <!--nexus服务器,id为组仓库name-->
      <servers>  
        <server>  
            <id>smart_group</id>  
            <username>admin</username>  
            <password>admin123</password>  
        </server>   
      </servers>  
    <!--仓库组的url地址,id和name可以写组仓库name,mirrorOf的值设置为central--> <mirrors> <mirror> <id>smart_group</id> <name>smart_group</name> <url>http://******:8081/repository/smart_group/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>

    修改后可以重新编译项目,必须添加参数-U,(-U,--update-snapshots,强制更新releases、snapshots类型的插件或依赖库,否则maven一天只会更新一次snapshot依赖)。代理仓库会从远程中央仓库下载jar包

    #mvn clean compile -U

     

    这个时候可以看到代理仓库已经从中央仓库下载了项目编译需要的jar包。同样地,在组仓库中也能看到所有的jar包,包括代理仓库和宿主仓库的。

    2、通过管理平台上传三方jar包

    有些jar是第三方提供的,在中央仓库中是没有的,我们可以上传这些本地三方jar包到hosted repository宿主仓库中。

    上传成功后,就可以看到hosted repository和group repository中已经有了刚上传的三方jar包

    然后项目中通过编译打包就可以下载jar包到本地repository中了,记住maven   clean、compile、package首次执行时加参数-U。

    3、通过命令上传三方jar包

    在setting.xml配置文件中添加hosted repository server

        <!--id自定义,但是在使用命令上传的时候会用到-->
        <server>  
            <id>smart_hosted</id>  
            <username>admin</username>  
            <password>admin123</password>  
         </server>

    使用如下命令上传jar包:

    mvn deploy:deploy-file -DgroupId=com.alan6.land -DartifactId=land-user -Dversion=0.0.1 -Dpackaging=jar -Dfile=d:land-service-user.jar -Durl=http://ip:8081/repository/smart_group/ -DrepositoryId=smart_group

    命令解释:
    -DgroupId=com.alan6.land                 自定义
    -DartifactId=land-user                   自定义
    -Dversion=0.0.1                      自定义,三个自定义,构成pom.xml文件中的标识
    -Dpackaging=jar                    传的类型是jar类型
    -Dfile=D:jarland-user-0.0.1.jar              jar包的本地磁盘位置
    -Durl=http://ip:8081/repository/smart_hosted/                    hosted资源库的地址
    -DrepositoryId=smart_hosted               需要和setting.xml文件中配置的ID一致

    上传成功后,hosted repository中已经可以看到了

    四、deploy部署jar包到私服

    1、release和snapshots jar包区别

    SNAPSHOT版本代表不稳定(快照版本),还在处于开发阶段,随时都会有变化。当上传同样的版本号jar包的时候,SNAPSHOT会在版本号的后面自动追加一串新的数字,即日志标签,nexus会根据日志标签区分出不同的版本,在maven引用时,如果使用的是snapshot版本,重新导入maven的时候,会去私库拉取最新上传的代码。

    RELEASE则代表稳定的版本(发布版本),一般上线后都会改用RELEASE版本。也就是说1.0,2.0这样的版本只能有一个,也就是说当前版本号下,不可能出现不同的jar。

    2、创建snapshot仓库

    可以在nexus上添加一个snapshot仓库,专门用于存放snapshot版本的jar包。snapshot仓库也是hosted类型的,创建方式和hosted repository类型。创建好后,加入到组仓库里面就可以了。

    3、项目pom.xml文件配置

    可以在项目的pom文件中设置具体的relaeses库和snapshots库。如果当前项目的版本号的后缀名中带着-SNAPSHOT,类似<version>***-SNAPSHOT</version>,就会将项目jar包提交到snapshots库中,没有带-SNAPSHOT的话会提交releases库中。

    在pom.xml文件中配置 distributionManagement 节点如下,在项目中执行deploy命令后,jar包将会被上传到nexus中。

        <distributionManagement>
            <repository>
                <id>nexus-releases</id> <!--release版本仓库-->
                <name>Nexus Release Repository</name>
                <url>http://ip:8081/repository/smart_hosted/</url>
            </repository>
            <snapshotRepository>
                <id>nexus-snapshots</id> <!--snapshot版本仓库-->
                <name>Nexus Snapshot Repository</name>
                <url>http://ip:8081/repository/smart_snapshots/</url>
            </snapshotRepository>
        </distributionManagement>

    默认地,maven编译打包不会下载SNAPSHOT版本的jar包,所以还需要在pom.xml文件中配置支持下载snapshot版本jar包。

        <repositories>
            <repository>
                <id>smart_group</id>
                <url>http://ip:8081/repository/smart_group/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
        </repositories>

    至此,nexus搭建完毕,支持本地部署依赖jar包

    参考资料

    1、https://blog.csdn.net/localhost01/article/details/84350773

    2、https://blog.csdn.net/lupengfei1009/article/details/93202578

  • 相关阅读:
    关于使用easyui dataGrid遇到的小bug问题
    构造带清除按钮的combo
    ajax方式提交数据时“+”的处理
    JavaScript call方法
    stackoverflow上的一个关于传递类对象的问题
    经典回溯算法(八皇后问题)
    c++构造函数(初始化式)被忽略的东西
    跟着<<C++Primer 学set容器>>
    排序算法(内部排序)总结
    hosts文件无法修改的问题解决方案
  • 原文地址:https://www.cnblogs.com/alan6/p/13038665.html
Copyright © 2020-2023  润新知