Maven学习4: 私服

1. 私服

第3篇说明了仓库的分类,其中讲到了私服,私服的好处很明显,这篇继续跟着公众号学习私服的搭建、仓库管理、构件部署等知识。

1. 仓库管理软件

  1. Sonatype Nexus:

  2. JFrog Artifactory: https://jfrog.com/artifactory/

2. 搭建Nexus服务

这里学习nexus的服务搭建,JFrog的后续再写。

1. 环境

  • Centos:7.6
  • jdk:1.8u231
  • maven:3.6.3

2.搭建

  1. 下载,下载安装包到/opt/nexus目录

    [root@john nexus]# pwd
    /opt/nexus
    [root@john nexus]# ll
    total 132256
    -rw-r--r-- 1 root root 135426386 Nov 14 00:31 latest-unix.tar.gz
  2. 解压

    [root@john nexus]# tar -zxvf latest-unix.tar.gz
    [root@john nexus]# ll
    total 132264
    -rw-r--r-- 1 root root 135426386 Nov 14 00:31 latest-unix.tar.gz
    drwxr-xr-x 9 root root      4096 Dec 15 15:50 nexus-3.19.1-01
    drwxr-xr-x 3 root root      4096 Dec 15 15:50 sonatype-work
  3. 启动服务

    [root@john /]# cd /opt/nexus/nexus-3.19.1-01/bin/
    [root@john bin]# ./nexus start
  4. 开放端口

    • 编辑iptables文件

      [root@john bin]# vim /etc/sysconfig/iptables
    • 打开nexus服务默认端口8081

      # 添加一行内容
      -A INPUT -p tcp -m state --state NEW -m tcp --dport 8081 -j ACCEPT
    • 重启防火墙

      [root@john bin]# systemctl restart iptables.service
  5. 访问nexus服务

    • 地址:http://nexus服务器ip:8081
    • 登录:

      • user: admin
      • password: 初始密码存放在/opt/nexus/sonatype-work/nexus3/admin.password文件中。
    • 修改密码

3. Nexus仓库分类

3.1 介绍

登录nexus后,发现nexus内置了三种类型的仓库。

  • 代理仓库(proxy)
  • 宿主仓库(hosted)
  • 仓库组(group)
    image.png

3.2 代理仓库(proxy)

  1. 介绍
    maven从代理仓库下载构件,代理仓库会间接地从远程仓库下载并缓存构件。
  2. 创建代理仓库,代理aliyun仓库。

    • 切换顶部菜单到server administration and configuration (设置页面)。
    • 选择Repository > Repositories,点击Create repository。
    • 选择maven2(proxy)
    • 填写Name: maven-aliyun
    • 选择Maven2 > Version Policy:表示该仓库为发布版本(Release)仓库还是快照(Snapshot)版本仓库,这里选择Release。
    • 填写Proxy > Remote storage :阿里云仓库地址(https://maven.aliyun.com/repository/public,该地址是个仓库组,具体可查看https://maven.aliyun.com/mvn/view)
    • 点击底部的Create repository,完成代理仓库的创建。

3.3 宿主仓库

  1. 介绍
    宿主仓库主要是储存组织内部的,或者一些无法从公共仓库获得的第三方构件,供大家下载使用。
  2. 创建宿主仓库

    • 选择Repository > Repositories,点击Create repository。
    • 选择maven2(hosted)
    • 填写Name: maven-test-releases
    • 选择Maven2 > Version Policy:这里选择Relase,表明该仓库为发布版本仓库。
    • 点击底部的Create repository,完成代理仓库的创建。
  3. 部署构件:

    • 手动部署:将第三方构件通过nexus中网页的方式上传到宿主仓库。
    • maven部署:将项目构件部署到指定的nexus的宿主仓库.

3.4 仓库组(group)

  1. 什么是仓库组?

    • 仓库组对多个仓库地址进行聚合,本身不包含实际内容,通过转向组内包含的宿主仓库或者代理仓库获得实际构件的内容。
  2. 为什么使用仓库组?

    • 通过访问一个仓库组就可以间接的访问这个组内所有的仓库。
    • 组内可以包括多个代理仓库或者宿主仓库。
  3. 组内仓库顺序

    • 仓库组所包含的仓库的顺序决定了仓库组遍历组内仓库的次序。
    • 一般将常用的仓库放在前面。

4. 配置maven从Nexus下载构件

4.1 项目级别的配置

  1. 在项目pom文件配置仓库(${project.basedir}/pom.xml)

    
         
             maven-nexus
             http://nexus服务ip:8081/repository/maven-public/
             
                 true
             
             
                 true
             
         
     
  2. 在用户配置中配置仓库认证信息(~/.m2/setting.xml

    
      
      maven-nexus
      repouser
      repopwd
    
  3. 构件下载验证

    • 删除demo1项目使用到本地仓库中的org.springframework:spring-web:5.2.1.RELEASE构件。
    • 在demo1项目根目录执行mvn compile
    • 查看命令执行结果

      [INFO] Scanning for projects...
      [INFO] 
      [INFO] -----------------------< com.john.example:demo1 >-----------------------
      [INFO] Building HellMaven 1.0
      [INFO] --------------------------------[ jar ]---------------------------------
      Downloading from maven-nexus: http://nexus服务ip:8081/repository/maven-public/org/springframework/spring-web/5.2.1.RELEASE/spring-web-5.2.1.RELEASE.pom
      Downloaded from maven-nexus: http://nexus服务ip:8081/repository/maven-public/org/springframework/spring-web/5.2.1.RELEASE/spring-web-5.2.1.RELEASE.pom (1.9 kB at 15 kB/s)
      ...
      [INFO] 
      [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ demo1 ---
      [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
      [INFO] Copying 0 resource
      [INFO] 
      [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ demo1 ---
      [INFO] Nothing to compile - all classes are up to date
      [INFO] ------------------------------------------------------------------------
      [INFO] BUILD SUCCESS
      [INFO] ------------------------------------------------------------------------
      [INFO] Total time:  26.582 s
      [INFO] Finished at: 2019-12-17T23:30:09+08:00
      [INFO] ------------------------------------------------------------------------

4.2 用户级别的配置(镜像)

  1. 修改用户配置文件(~/.m2/setting.xml),配置镜像

    
      mirror-nexus
      *
      nexus镜像
      http://nexus服务ip:8081/repository/maven-public/
    
  2. 配置仓库认证信息(~/.m2/setting.xml)。

    
      
      mirror-nexus
      repouser
      repopwd
    
  3. 构件下载验证。

    • 删除项目pom文件中仓库的配置。
    • 删除demo1项目使用到本地仓库中的org.springframework:spring-web:5.2.1.RELEASE构件。
    • 在demo1项目根目录执行mvn compile
    • 查看命令执行结果

      [INFO] Scanning for projects...
      [INFO] 
      [INFO] -----------------------< com.john.example:demo1 >-----------------------
      [INFO] Building HellMaven 1.0
      [INFO] --------------------------------[ jar ]---------------------------------
      Downloading from mirror-nexus: http://nexus服务ip:8081/repository/maven-public/org/springframework/spring-web/5.2.1.RELEASE/spring-web-5.2.1.RELEASE.pom
      Downloaded from mirror-nexus: http://nexus服务ip:8081/repository/maven-public/org/springframework/spring-web/5.2.1.RELEASE/spring-web-5.2.1.RELEASE.pom (1.9 kB at 16 kB/s)
      [INFO] 
      [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ demo1 ---
      [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
      [INFO] Copying 0 resource
      [INFO] 
      [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ demo1 ---
      [INFO] Nothing to compile - all classes are up to date
      [INFO] ------------------------------------------------------------------------
      [INFO] BUILD SUCCESS
      [INFO] ------------------------------------------------------------------------
      [INFO] Total time:  26.202 s
      [INFO] Finished at: 2019-12-17T23:49:22+08:00
      [INFO] ------------------------------------------------------------------------

5. 部署构件到Nexus

5.1 使用maven部署构件

  1. 快照版本构件

    • 日常开发生成的快照版本构件,部署到Nexus中策略为Snapshot的宿主仓库中。
  2. 发布版本构件

    • 项目正式发布的构件,部署到Nexus中策略为Release的宿主仓库中。
  3. 项目pom配置(${project.basedir}/pom.xml)

    
        
        
            nexus-releases
            nexus私服中宿主仓库->存放/下载发布版本的构件
            http://nexus服务ip:8081/repository/maven-releases/
        
    
        
        
            nexus-snapshots
            nexus私服中宿主仓库->存放/下载快照版本的构件
            http://nexus服务ip:8081/repository/maven-snapshots/
        
    
  4. 配置仓库认证信息(~/.m2/setting.xml

    
      
      nexus-releases
      repouser
      repopwd
    
    
    
      
      nexus-snapshots
      repouser
      repopwd
    
  5. 部署项目(mvn deploy)

    • 根据项目的版本,决定是部署到Release策略的仓库还是Snapshot策略的仓库。
    • 1.0-SNAPSHOT: Uploaded to nexus-snapshots。
    • 1.0: Uploaded to nexus-releases。
  6. 注意

    • snapshot版本的构件支持重复部署到私服。
    • release版本的构件默认不支持重复部署。这与要部署仓库的Deployment policy设置有关。

5.2 手动部署第三方构件

  1. 上传时,首先选择要上传构件的宿主仓库。
  2. 然后选择本地文件,输入构件坐标。

你可能感兴趣的:(maven3,nexus)