theboyaply
theboyaply
发布于 2020-07-24 / 1210 阅读
0
0

5-maven私服详解

原文链接:https://mp.weixin.qq.com/s/p0DcqzSn1e0ZfU3lHBJjMw

本篇内容

  1. 私服介绍
  2. windows中安装nexus私服
  3. linux中安装nexus私服
  4. nexus私服中各种仓库详解
  5. 配置本地Maven从nexus下载构件
  6. 将本地构件发布到私服的2种方式详解
  7. 总结

私服介绍

私服也是远程仓库中的一种,我们为什么需要私服呢?

如果我们一个团队中有几百个人在开发一些项目,都是采用maven的方式来组织项目,那么我们每个人都需要从远程仓库中把需要依赖的构件下载到本地仓库,这对公司的网络要求也比较高,为了节省这个宽带和加快下载速度,我们在公司内部局域网内部可以架设一台服务器,这台服务器起到一个代理的作用,公司里面的所有开发者去访问这个服务器,这台服务器将需要的构建返回给我们,如果这台服务器中也没有我们需要的构建,那么这个代理服务器会去远程仓库中查找,然后将其先下载到代理服务器中,然后再返回给开发者本地的仓库。

还有公司内部有很多项目之间会相互依赖,你可能是架构组的,你需要开发一些jar包给其他组使用,此时,我们可以将自己jar发布到私服中给其他同事使用,如果没有私服,可能需要我们手动发给别人或者上传到共享机器中,不过管理起来不是很方便。

总体上来说私服有以下好处:

  1. 加速maven构件的下载速度
  2. 节省宽带
  3. 方便部署自己的构件以供他人使用
  4. 提高maven的稳定性,中央仓库需要本机能够访问外网,而如果采用私服的方式,只需要本机可以访问内网私服就可以了

有3种专门的maven仓库管理软件可以用来帮助我们搭建私服:

  1. Apache基金会的archiva

    http://archiva.apache.org/
    
  2. JFrog的Artifactory

    https://jfrog.com/artifactory/
    
  3. Sonatype的Nexus

    https://my.sonatype.com/
    

这些都是开源的私服软件,都可以自由使用。用的最多的是第三种Nexus,本文我们主要以这个来讲解,其他2种有兴趣的朋友可以去研究一下。

环境准备

nexus是java开发的,所以运行的时候需要有java环境的支持。

安装jdk

安装jdk1.8,可以参考jdk安装这篇文章中有介绍。

下载nexus安装包

官方下载地址:

https://help.sonatype.com/repomanager3/download

网盘链接:

链接:https://pan.baidu.com/s/14syuF_a9n60pJJyTAq544A 
提取码:qt8q

网盘提供的nexus版本为:3.19.1-01,共latest-mac.tgzlatest-unix.tar.gzlatest-win64.zip三种安装包。

Windows10中安装Nexus私服

下载解压

从前面提供的安装包下载途径中,下载latest-win64.zip压缩包。解压放置合适的目录中。

这里我选择放在 D:/nexus目录下:

maven04-01

启动nexus

cmd中直接运行nexus-3.19.1-01/bin/nexus.exe /run ,如下:

D:\nexus\nexus-3.19.1-01\bin>nexus.exe /run

如果输出中出现了下面的异常请忽略:

java.io.UnsupportedEncodingException: Encoding GBK is not supported yet (feel free to submit a patch)

浏览器访问nexus

http://localhost:8081/

效果如下:

maven05-02

登录Nexus

点击上图右上角的Sign in,输入用户名和密码,nexus默认用户名是admin

nexus这个版本的密码是第一次启动的时候生成的,密码位于下面的文件中:

安装目录/sonatype-work/nexus3/admin.password

登录成功后会让我们重新设置密码,以及一些其它设置,我们设置完密码后,一直next直到设置完成即可。

maven05-03

停止nexus

直接在启动的cmd中按ctrl+c即可。

修改启动端口

默认端口是8081,如果和本机有冲突,可以在下面的文件中修改:

nexus-3.19.1-01\etc\nexus-default.properties

nexus使用java开发的web项目,内置了jetty web容器,所以可以直接运行。

Linux安装Nexus私服

下载解压

从前面提供的安装包下载途径中,下载latest-unix.tar.gz。放在/opt/nexus/目录。

[root@localhost nexus]# pwd
/opt/nexus
[root@localhost nexus]# ls
latest-unix.tar.gz  nexus-3.19.1-01  sonatype-work
[root@localhost nexus]#

启动

[root@localhost nexus]# nexus-3.19.1-01/bin/nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************
Starting nexus

上面使用的是root用户操作的,为了安全性,最好创建个用户来操作。

开放端口

iptables方式

/etc/sysconfig/iptables文件中加入下面内容:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 8081 -j ACCEPT

执行下面命令,让上面配置生效:

# service iptables restart
Redirecting to /bin/systemctl restart  iptables.service

firewalld方式

[root@localhost nexus]# firewall-cmd --zone=public --add-port=8081/tcp --permanent
success
[root@localhost nexus]# firewall-cmd --reload
success
[root@localhost nexus]# firewall-cmd --zone=public --list-ports
8081/tcp

浏览器访问

http://192.168.19.110:8081/

效果如下:

maven05-02

登录

用户名为admin,密码在

/opt/nexus/sonatype-work/nexus3/admin.password

登录成功后会让我们重新设置密码,以及一些其它设置,我们设置完密码后,一直next直到设置完成即可。

停止

[root@localhost nexus]# nexus-3.19.1-01/bin/nexus stop
WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************
Shutting down nexus
Stopped.

修改启动端口

默认端口是8081,如果和本机有冲突,可以在下面的文件中修改:

/opt/nexus/nexus-3.19.1-01/etc/nexus-default.properties

Nexus中仓库分类

前面我们说过,用户可以通过nexus去访问远程仓库,可以将本地的构件发布到nexus中,nexus是如何支撑这些操作的呢?

nexus中有个仓库列表,里面包含了各种各样的仓库,有我们说的被代理的第三方远程仓库,如下图:

maven05-04

上图中是nexus安装好默认自带的仓库列表,主要有3种类型:

  1. 代理仓库
  2. 宿主仓库
  3. 仓库组

代理仓库

代理仓库主要是让使用者通过代理仓库来间接访问外部的第三方远程仓库的,如通过代理仓库访问maven中央仓库、阿里的maven仓库等等。代理仓库会从被代理的仓库中下载构件,缓存在代理仓库中以供maven用户使用。

我们在nexus中创建一个阿里云的maven代理仓库来看下过程如下。

Nexus仓库列表中点击Create repository按钮,如下图:

maven05-05

进入添加页面,选择maven2(proxy),这个表示代理仓库,如下图:

maven05-06

输入远程仓库的信息,如下图:

maven05-07

第一个红框中输入仓库名称:maven-aliyun

第二个红框选择:Release,表示从这个仓库中下载稳定版的构件

第三个红框输入阿里云仓库地址:https://maven.aliyun.com/repository/public

点击底部的Create repository按钮,创建完成,如下图:

maven05-08

宿主仓库

宿主仓库主要是给我们自己用的,主要有2点作用

  1. 将私有的一些构件通过nexus中网页的方式上传到宿主仓库中给其他同事使用
  2. 将自己开发好一些构件发布到nexus的宿主仓库中以供其他同事使用

上面这2种操作,一会稍后会详解以及演示操作过程。

仓库组

maven用户可以从代理仓库和宿主仓库中下载构件至本地仓库,为了方便从多个代理仓库和宿主仓库下载构件,maven提供了仓库组,仓库组中可以有多个代理仓库和宿主仓库,而maven用户只用访问一个仓库组就可以间接的访问这个组内所有的仓库,仓库组中多个仓库是有顺序的,当maven用户从仓库组下载构件时,仓库组会按顺序依次在组内的仓库中查找组件,查找到了立即返回给本地仓库,所以一般情况我们会将速度快的放在前面。

仓库组内部实际上是没有构件内容的,他只是起到一个请求转发的作用,将maven用户下载构件的请求转发给组内的其他仓库处理。

nexus默认有个仓库组maven-public,如下:

maven05-09

点击一下maven-public这行记录,进去看一下,如下图:

maven05-10

上图中第一个红框是这个仓库组对外的一个url,我们本地的maven可以通过这个url来从仓库组中下载构件至本地仓库。

第二个红框中是这个仓库组中的成员,目前包含了3个仓库,第1个是宿主的releases版本仓库,第1个是宿主快照版本的仓库,第3个是代理仓库(maven社区中央仓库的代理)。

刚才我们新增的maven-aliyun在左边,我们将其也加到右边的仓库成员(Members)列表,然后将maven-aliyun这个仓库放在第3个位置,这个仓库的速度比maven-central要快一些,能加速我们下载maven构件的速度,如下图:

maven05-11

配置本地Maven从nexus下载构件

介绍2种方式

方式一:pom.xml

本次我们就从nexus默认仓库组中下载构件,先获取仓库组对外的地址,点击下图中的copy按钮,获取仓库组的地址:

maven05-12

maven05-13

修改pom.xml,加入如下内容:

注意下面url的地址为上面复制的地址。

<repositories>
        <repository>
            <id>maven-nexus</id>
            <url>http://192.168.19.110:8081/repository/maven-public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
                <checksumPolicy>warn</checksumPolicy>
            </snapshots>
        </repository>
    </repositories>

这里需要注意一个点,那就是snapshots下面我们还配置了另外两个属性updatePolicychecksumPolicy

一般来讲releases版本的构件每次发布都会使用一个新的版本号,而snapshots可能一个版本号会被重复发布(即更新)多次,所以我们常常需要指定更新策略。

updatePolicy,表示重新加载依赖或编译打包时需不需要更新【这个仓库的】依赖。

  • always:总是更新。
  • daily:一天一次,默认是这个。
  • interval:按分钟更新。比如interval:480表示过了8小时后刷新依赖的话,就会重新加载依赖。
  • never:永远不。

checksumPolicy,表示加载依赖失败时做出的行为。

  • ignore:忽略,继续往后执行。
  • fail:终止。
  • warn:给出提示,继续往后执行,默认是这个。

由于nexus私服需要有用户名和密码登录才能访问,所以需要有凭证。

凭证需要在settings.xml文件中配置。servers元素中加入如下内容:

<server>
    <id>maven-nexus</id>
    <username>admin</username>
    <password>123456</password>
</server>

注意上面的server->id的值和pom.xmlrepository->id的值一致,通过这个id关联找到凭证的。

server元素中的username和password就是nexus的账号密码。

方式一:示例

创建一个maven项目,打开idea,点击File->New->Project,选择Maven,如下:

idea-create-maven01

点击Next,输入项目坐标信息,如下:

maven05-14

点击Next,输入Project name 为maven4,如下:

maven05-15

点击Finish,创建成功,如下:

maven05-16

配置一下idea的maven环境,点击File->Settings,如下图:

maven05-17

点击上面的OK完成配置。

这里使用的~/.m2/settings.xml是maven的默认配置,未经过修改的setting.xml。

使用的本地仓库地址~/.m2/repository也是一个空目录。

修改上面idea项目中的pom.xml文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.theboyaply</groupId>
    <artifactId>maven4</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>
    </dependencies>

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

</project>

在项目根目录运行命令:

mvn compile

输出如下(仅截取从私服下载的fastjson部分信息):

D:\myResource\maven\maven4>mvn compile
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.theboyaply:maven4 >------------------------
[INFO] Building maven4 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from maven-nexus: http://192.168.19.110:8081/repository/maven-public/com/alibaba/fastjson/1.2.62/fastjson-1.2.62.pom
Downloaded from maven-nexus: http://192.168.19.110:8081/repository/maven-public/com/alibaba/fastjson/1.2.62/fastjson-1.2.62.pom (9.7 kB at 32 kB/s)
Downloading from maven-nexus: http://192.168.19.110:8081/repository/maven-public/com/alibaba/fastjson/1.2.62/fastjson-1.2.62.jar
Downloaded from maven-nexus: http://192.168.19.110:8081/repository/maven-public/com/alibaba/fastjson/1.2.62/fastjson-1.2.62.jar (658 kB at 1.5 MB/s)
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven4 ---
[WARNING] Using platform encoding (GBK 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) @ maven4 ---
[INFO] Nothing to compile - all classes are up to date
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.848 s
[INFO] Finished at: 2020-07-24T00:05:32+08:00
[INFO] ------------------------------------------------------------------------

从输出中(部分)可以看到fastjson这个构件的下载来源是Downloaded from maven-nexus,说明我们的配置生效了。

值得注意的是:

  1. 上面提到过,这里使用的本地仓库是一个空目录,所以maven在编译时,除了下载fastjson包以外,还会下载很多maven本身需要的插件。

  2. 因为我们在pom.xml中仅指定了fastjson从nexus私服中下载。所以在输出的信息中,只有fastjson的下载地址是私服地址:

    Downloading from maven-nexus: http://192.168.19.110:8081/repository/maven-public/com/alibaba/fastjson/1.2.62/fastjson-1.2.62.pom

    其它的下载地址都是中央仓库地址:

    Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/maven-project/2.0.9/maven-project-2.0.9.pom

方式二:镜像方式

关于什么是镜像,这里就不在做说明了,上篇文章中有介绍,可以移步过去看一下:仓库详解

镜像方式主要修改~/.m2/setting.xml文件,需要修改2处理。

第1处:~/.m2/setting.xml的mirrors元素中加入如下配置:

<mirror>
  <id>mirror-nexus</id>
  <mirrorOf>*</mirrorOf>
  <name>nexus镜像</name>
  <url>http://192.168.19.110:8081/repository/maven-public/</url>
</mirror>

上面mirrorOf配置的*,说明所有远程仓库都通过该镜像下载构件。

url:这个为nexus中仓库组的地址,上面方式一中有说过。

第2处:由于nexus的url是需要用户名和密码才可以访问的,所以需要配置访问凭证,在~/.m2/settings.xml文件的servers元素中加入如下内容:

<server>
  <id>mirror-nexus</id>
  <username>admin</username>
  <password>123456</password>
</server>

注意上面的server->id的值和mirror->id的值需要一致,这样才能找到对应的凭证。

PS:方式一中咱们提到过不配置凭证也是可以正常拉取构件的。经测试,方式二必须要配置凭证,否则会报错提示没有权限。

方式二:示例

还是以方式1中的maven项目maven4为例。

修改pom.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.theboyaply</groupId>
    <artifactId>maven4</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>
    </dependencies>

</project>

~/.m2/setting.xml中的servers元素中加入下面内容:

<server>
  <id>mirror-nexus</id>
  <username>admin</username>
  <password>123456</password>
</server>

注意上面username、password根据你们自己的进行配置。

~/.m2/setting.xml中的mirrors元素中加入下面内容:

<mirror>
  <id>mirror-nexus</id>
  <mirrorOf>*</mirrorOf>
  <name>nexus镜像</name>
  <url>http://192.168.19.110:8081/repository/maven-public/</url>
</mirror>

删除本地仓库中的fastjson相关目录:

~\.m2\repository\com\alibaba

在项目根目录运行命令:

mvn compile

输出如下:

D:\myResource\maven\maven4>mvn compile
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.theboyaply:maven4 >------------------------
[INFO] Building maven4 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom
Downloaded from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom (0 B at 0 B/s)
Downloading from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom
Downloaded from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom (0 B at 0 B/s)
Downloading from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/maven/maven-parent/22/maven-parent-22.pom
Downloaded from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/maven/maven-parent/22/maven-parent-22.pom (0 B at 0 B/s)
Downloading from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/apache/11/apache-11.pom
Downloaded from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/apache/11/apache-11.pom (0 B at 0 B/s)
Downloading from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.jar
Downloaded from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.jar (0 B at 0 B/s)
Downloading from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/maven/plugins/maven-compiler-plugin/3.1/maven-compiler-plugin-3.1.pom
Downloaded from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/maven/plugins/maven-compiler-plugin/3.1/maven-compiler-plugin-3.1.pom (0 B at 0 B/s)
...
...

输出信息太多,仅截取部分。从信息中可以看到,构件的下载地址已经已经变成了Downloading from mirror-nexus,说明我们的配置生效了。

因为是在~/.m2/setting.xml中配置的拦截所有构件,所以不仅仅是fastjson构件从私服下载,maven本身需要的插件信息也重新从私服中下载了。

本地构件发布到私服

经常用到的有2种:

  1. 使用maven部署构件至私服
  2. 手动部署第三方构件至私服。

方式一:使用maven部署构件至私服

我们创建maven项目的时候,会有一个pom.xml文件,里面有个version元素,这个是这个构件的版本号,可以去看一下上面我们刚创建的maven4,默认是1.0-SNAPSHOT,这个以-SNAPSHOT结尾的表示是个快照版本,叫做SNAPSHOT版本,快照版本一般是不稳定的,会反复发布、测试、修改、发布。而最终会有一个稳定的可以发布的版本,是没有-SNAPSHOT后缀的,这个叫做release版本。

而nexus私服中存储用户的构件是使用的宿主仓库,这个我们上面也有说过,nexus私服中提供了两个默认的宿主仓库分别用来存放SNAPSHOT版本和release版本,如下图:

maven05-04

上图中宿主仓库的第1个maven-releases,用来存放用户自己release版本的构件。第2个maven-snapshots,用来存放用户snapshot版本的构件。

操作分为3步

第1步:修改pom.xml

修改项目中pom.xml的配置,加入下面内容:

<distributionManagement>
    <repository>
        <id>release-nexus</id>
        <url>http://192.168.19.110:8081/repository/maven-releases/</url>
        <name>nexus私服中宿主仓库->存放/下载稳定版本的构件</name>
    </repository>
    <snapshotRepository>
        <id>snapshot-nexus</id>
        <url>http://192.168.19.110:8081/repository/maven-snapshots/</url>
        <name>nexus私服中宿主仓库->存放/下载快照版本的构件</name>
    </snapshotRepository>
</distributionManagement>

上面两个url分别是上图中宿主仓库的两个地址。

第2步:修改setting.xml

上面地址需要登录才可以访问,所以需要配置凭证,这个需要在~/.m2/settings.xml中进行配置,在这个文件的servers元素中加入:

<server>
  <id>release-nexus</id>
  <username>admin</username>
  <password>123456</password>
</server>

<server>
  <id>snapshot-nexus</id>
  <username>admin</username>
  <password>123456</password>
</server>

注意上面第1个server->id的值需要和pom.xml中的distributionManagement->repository->id的值一致。

第2个server->id的值需要和pom.xml中的distributionManagement->snapshotRepository->id的值一致。

第3步:执行’mvn deploy’命令

在项目根目录执行mvn deploy的时候,会对构件进行打包,然后上传到私服中。

方式一:示例

根据上面的介绍,修改之前创建的项目maven4中的pom.xml文件,和本地~/.m2/setting.xml

在项目根目录打开cmd,运行命令:

mvn deploy

输出如下:

D:\myResource\maven\maven4>mvn deploy
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.theboyaply:maven4 >------------------------
[INFO] Building maven4 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/maven/plugins/maven-surefire-plugin/2.12.4/maven-surefire-plugin-2.12.4.pom
Downloaded from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/maven/plugins/maven-surefire-plugin/2.12.4/maven-surefire-plugin-2.12.4.pom (10 kB at 7.6 kB/s)
Downloading from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/maven/surefire/surefire/2.12.4/surefire-2.12.4.pom
Downloaded from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/maven/surefire/surefire/2.12.4/surefire-2.12.4.pom (14 kB at 16 kB/s)
Downloading from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/maven/plugins/maven-surefire-plugin/2.12.4/maven-surefire-plugin-2.12.4.jar
Downloaded from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/apache/maven/plugins/maven-surefire-plugin/2.12.4/maven-surefire-plugin-2.12.4.jar (30 kB at 43 kB/s)
......
......
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ maven4 ---
Downloading from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/codehaus/plexus/plexus-utils/1.5.6/plexus-utils-1.5.6.pom
Downloaded from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/codehaus/plexus/plexus-utils/1.5.6/plexus-utils-1.5.6.pom (5.3 kB at 13 kB/s)
Downloading from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/codehaus/plexus/plexus/1.0.12/plexus-1.0.12.pom
Downloaded from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/codehaus/plexus/plexus/1.0.12/plexus-1.0.12.pom (9.8 kB at 18 kB/s)
Downloading from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/codehaus/plexus/plexus-utils/1.5.6/plexus-utils-1.5.6.jar
Downloaded from mirror-nexus: http://192.168.19.110:8081/repository/maven-public/org/codehaus/plexus/plexus-utils/1.5.6/plexus-utils-1.5.6.jar (251 kB at 301 kB/s)
Downloading from snapshot-nexus: http://192.168.19.110:8081/repository/maven-snapshots/com/theboyaply/maven4/1.0-SNAPSHOT/maven-metadata.xml
Downloaded from snapshot-nexus: http://192.168.19.110:8081/repository/maven-snapshots/com/theboyaply/maven4/1.0-SNAPSHOT/maven-metadata.xml (764 B at 16 kB/s)
Uploading to snapshot-nexus: http://192.168.19.110:8081/repository/maven-snapshots/com/theboyaply/maven4/1.0-SNAPSHOT/maven4-1.0-20200724.023529-2.jar
Uploaded to snapshot-nexus: http://192.168.19.110:8081/repository/maven-snapshots/com/theboyaply/maven4/1.0-SNAPSHOT/maven4-1.0-20200724.023529-2.jar (1.8 kB at 20 kB/s)
Uploading to snapshot-nexus: http://192.168.19.110:8081/repository/maven-snapshots/com/theboyaply/maven4/1.0-SNAPSHOT/maven4-1.0-20200724.023529-2.pom
Uploaded to snapshot-nexus: http://192.168.19.110:8081/repository/maven-snapshots/com/theboyaply/maven4/1.0-SNAPSHOT/maven4-1.0-20200724.023529-2.pom (1.6 kB at 17 kB/s)
Downloading from snapshot-nexus: http://192.168.19.110:8081/repository/maven-snapshots/com/theboyaply/maven4/maven-metadata.xml
Downloaded from snapshot-nexus: http://192.168.19.110:8081/repository/maven-snapshots/com/theboyaply/maven4/maven-metadata.xml (278 B at 5.9 kB/s)
Uploading to snapshot-nexus: http://192.168.19.110:8081/repository/maven-snapshots/com/theboyaply/maven4/1.0-SNAPSHOT/maven-metadata.xml
Uploaded to snapshot-nexus: http://192.168.19.110:8081/repository/maven-snapshots/com/theboyaply/maven4/1.0-SNAPSHOT/maven-metadata.xml (764 B at 5.0 kB/s)
Uploading to snapshot-nexus: http://192.168.19.110:8081/repository/maven-snapshots/com/theboyaply/maven4/maven-metadata.xml
Uploaded to snapshot-nexus: http://192.168.19.110:8081/repository/maven-snapshots/com/theboyaply/maven4/maven-metadata.xml (278 B at 2.7 kB/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 47.519 s
[INFO] Finished at: 2020-07-24T10:35:29+08:00
[INFO] ------------------------------------------------------------------------

因为之前我们配置了镜像方式从私服下载构件,所以这里maven下载自己需要的插件时,全部是从mirror-nexus这个地址下载的。

在输出信息的尾部可以看见,有Uploading to snapshot-nexus、Uploaded to snapshot-nexussnapshot-nexus正是我们在pom.xml配置的快照版本的地址,上面输出内容中有具体的地址,和快照的地址也是一样的,上传成功了。

现在我们可以去私服中的快照仓库看一下:

可以直接访问快照仓库地址:

http://192.168.19.110:8081/repository/maven-snapshots/

如下:

maven05-18

点击browse链接,如下图,可以看见我们的构件上传成功了:

maven05-19

如果其他同事需要使用上面这个构件,只需要点击下图中的pom文件,右边会显示构件的坐标,然后可以拿去使用了,如下图:

maven05-20

上面是将快照版本的发布到了nexus私服的快照宿主仓库了。

下面我们再来操作一下将release稳定版本的发布到nexus私服。

修改pom.xml文件的版本号,将-SNAPSHOT后缀去掉,去掉之后表示是release版本的了,如下:

<version>1.0</version>

cmd命令中执行:

mvn deploy

输出:

D:\myResource\maven\maven4>mvn deploy
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.theboyaply:maven4 >------------------------
[INFO] Building maven4 1.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven4 ---
[WARNING] Using platform encoding (GBK 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) @ maven4 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ maven4 ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\myResource\maven\maven4\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ maven4 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ maven4 ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ maven4 ---
[INFO] Building jar: D:\myResource\maven\maven4\target\maven4-1.0.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ maven4 ---
[INFO] Installing D:\myResource\maven\maven4\target\maven4-1.0.jar to C:\Users\theAplyBoy\.m2\repository\com\theboyaply\maven4\1.0\maven4-1.0.jar
[INFO] Installing D:\myResource\maven\maven4\pom.xml to C:\Users\theAplyBoy\.m2\repository\com\theboyaply\maven4\1.0\maven4-1.0.pom
[INFO]
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ maven4 ---
Uploading to release-nexus: http://192.168.19.110:8081/repository/maven-releases/com/theboyaply/maven4/1.0/maven4-1.0.jar
Uploaded to release-nexus: http://192.168.19.110:8081/repository/maven-releases/com/theboyaply/maven4/1.0/maven4-1.0.jar (1.7 kB at 5.2 kB/s)
Uploading to release-nexus: http://192.168.19.110:8081/repository/maven-releases/com/theboyaply/maven4/1.0/maven4-1.0.pom
Uploaded to release-nexus: http://192.168.19.110:8081/repository/maven-releases/com/theboyaply/maven4/1.0/maven4-1.0.pom (1.6 kB at 13 kB/s)
Downloading from release-nexus: http://192.168.19.110:8081/repository/maven-releases/com/theboyaply/maven4/maven-metadata.xml
Uploading to release-nexus: http://192.168.19.110:8081/repository/maven-releases/com/theboyaply/maven4/maven-metadata.xml
Uploaded to release-nexus: http://192.168.19.110:8081/repository/maven-releases/com/theboyaply/maven4/maven-metadata.xml (296 B at 2.4 kB/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.465 s
[INFO] Finished at: 2020-07-24T10:51:21+08:00
[INFO] ------------------------------------------------------------------------

上面部署快照版本时,maven本身需要的插件已经全部下载好了,所以不再需要下载。因此本次信息中只有本地构件相关信息输出。

从信息中看到,release-nexus是我们的稳定版本地址,说明上传成功了。

打开nexus私服中release地址:

http://192.168.19.110:8081/repository/maven-releases/

如下:

maven05-21

方式二:手动部署构件至私服

一般来讲手动上传都只是上传稳定版本的构件,所以这里我们选择 releases仓库

操作步骤如下:

maven05-22

图中第一行maven-releases宿主仓库就是存放用户自己构件的仓库,点击上图中列表中的第一行,进入上传页面,如下图:

maven05-23

  1. 点击Browse选择本地的构件
  2. Classifier没用到过(不知道干啥的)
  3. Extension相当于pom.xml中的packaging元素,选择本地构件包后会自动变为jar(如果选的是jar包的话)。
  4. 然后再输入下面的其他坐标信息,记得要勾选上[Generate a POM file with these coordLnates],它会在上传时默认为这个构件生成一个pom文件。在你后续使用这个构件的时候,maven会拉取这个pom文件。如果不勾选的话,会报错提示说找不到pom文件(但是jar会正常被拉取下来)。
  5. 最下面的Packaging没用过,保持为空。
  6. 点击Upload完成上传操作。

私服常用用户角色管理方式

maven5-24

上图的几个选项分别代表:

  • Privileges:仓库的所有权限
  • Roles:仓库角色
  • Users:仓库用户
  • Anonymous Access:匿名用户权限

角色

Roles -> Create role -> Nexus role

maven5-25

如上图,需要填写角色ID、角色名称、权限(Privileges)以及包含的其它角色等信息。

Privileges部分说明,以上图过滤出的aliyun代理为例:

  • nx-repository-admin开头的是针对仓库本身的相关权限,一般我们不会用这个权限。
  • nx-repository-view开头的是针对仓库里jar的相关权限。
  • add表示上传jar包权限
  • edit表示编辑jar权限(个人理解可能是重复的deploy操作吧)
  • delete表示删除权限
  • browse表示浏览权限
  • read表示读取jar详细信息

基于以上说明加上个人理解,如果你仅仅需要浏览以及拉取jar包,那么给予browseread即可。如果你同时还需要部署等操作,那么把addeditdelete等也加上吧。

用户

Users -> Create local user。这没什么好讲的,按照admin或者其它已有的用户去建就好。

匿名访问

Security -> Anonymous Access菜单就是用来配置匿名访问的。

maven5-26

如上图,你需要选中Access下的那个钩钩,然后再选择一个用户,表示匿名访问时拥有的权限就是这个用户所拥有的权限。

– end –


评论