第5篇:私服详解

maven系列目标:从入门开始开始掌握一个高级开发所需要的maven技能。

这是maven系列第5篇。

整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部有maven完整系列的连接。

环境

  1. maven3.6.1

  2. 开发工具idea

  3. jdk1.8

本篇内容

  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:
  1. JFrog的Artifactory
https:
  1. Sonatype的Nexus
https:

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

Windows10中安装Nexus私服

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

安装jdk

安装jdk1.8,可以参考Maven系列第2篇:安装、配置、mvn运行过程详解这篇文章中有介绍

下载nexus

下面提供两种下载方式:官网下载、百度网盘下载,百度网盘速度会快一些。

官网和百度网盘中都包含了windows、linux、mac版本nexus安装文件。

建议大家使用网盘中的资源,保持和本文环境一致,可以避免出错。

nexus下载地址

https:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D0ZErCsj-1629908579960)(media/1c56967e321d4d60bddb47b130b3062b.png)]

百度网盘下载地址

链接:https:
提取码:vig6
复制这段内容后打开百度网盘手机App,操作更方便哦

解压latest-win64.zip

latest-win64.zip解压之后会产生两个文件目录nexus-3.19.1-01和sonatyp-work

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eAURX3XH-1629908579964)(media/a3c406272457c78add1e59ad3a2e6dbd.png)]

启动nexus

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

D:\installsoft\maven\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)

浏览器中打开

http:

效果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rVtSMPY1-1629908579967)(media/581753c746cf1796c1eb1b31a0a6443c.png)]

登录Nexus

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

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

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

登录成功后会弹出一些设置,如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xa9hl5Cj-1629908579971)(media/7a7ba956b424e012bc405fc2c3a86b3c.png)]

点击Next,设置新的登录密码(新密码要保存好),如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BMPAqCn3-1629908579973)(media/10ceec9fa80273a06452605b9ffbc7dc.png)]

点击Next->Finish完成设置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Auzumg7V-1629908579976)(media/fe5968f4597b4767b4b391847877e77d.png)]

其他一些常见的操作

停止Nexus的命令

启动的cmd窗口中按:ctrl+c,可以停止Nexus。

修改启动端口

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

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

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

Linux安装Nexus私服

下载安装包

百度网盘中下载linux版本的nexus安装包,选择latest-unix.tar.gz文件,下载地址如下:

链接:https:
提取码:vig6
复制这段内容后打开百度网盘手机App,操作更方便哦

将上面的安装包放在/opt/nexus/目录。

解压

[root@test1117 nexus]
[root@test1117 nexus]
latest-unix.tar.gz  nexus-3.19.1-01  sonatype-work

启动

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

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

开放端口

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

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

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

[root@test1117 bin]# service iptables restart
Redirecting to /bin/systemctl restart  iptables.service

验证效果

访问

http:

出现下面效果表示一切ok。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GH32QN7k-1629908579978)(media/c1d111c2cec3812e0e05e102e25b44ec.png)]

登录

用户名为admin,密码在

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

登录之后请请立即修改密码。

Nexus中仓库分类

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-to2qQTAG-1629908579980)(media/4a97266b218b430031041c09da041e8e.png)]

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

  1. 代理仓库

  2. 宿主仓库

  3. 仓库组

代理仓库

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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WDwS3yfW-1629908579983)(media/a19fe3b0dc167b477a6362cba55e66af.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CaEmn53G-1629908579985)(media/c75b0100eb7a0222a569cde53e536bd6.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gffaofql-1629908579986)(media/f590065a1044217cae5526f1223945fe.png)]

第一个红框中输入仓库名称:maven-aliyun第二个红框选择:Release,表示从这个仓库中下载稳定版的构件第三个红框输入阿里云仓库地址:https:

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zCiyPaRN-1629908579988)(media/ac861d6bdf4ecd6ac68f945faf323c64.png)]

宿主仓库

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

  1. 将私有的一些构件通过nexus中网页的方式上传到宿主仓库中给其他同事使用

  2. 将自己开发好一些构件发布到nexus的宿主仓库中以供其他同事使用

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

仓库组

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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aLobmTVO-1629908579990)(media/b882f76627d13259b257085ba7c5de7c.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1uqDQykC-1629908579991)(media/edd24f9a84d1421567a9edf16d3b08cf.png)]

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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SWE4fD13-1629908579993)(media/8e785fdfe3dcf3505e51037adeaa4365.png)]

配置本地Maven从nexus下载构件

介绍2种方式

方式1:pom.xml的方式

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6t3NyZHW-1629908579995)(media/bcda03ea71140152be040d5aba9b717c.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UEhewvBG-1629908579996)(media/6d99e823f94ab4a9317d73e52f3a67bc.png)]

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

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

<repositories><repository><id>maven-nexus</id><url>http:<releases><enabled></enabled></releases><snapshots><enabled></enabled></snapshots></repository>
</repositories>

由于nexus私服需要有用户名和密码登录才能访问,所以需要有凭证,凭证需要在settings.xml文件中配置,在~/.m2/settings.xml文件的servers元素中加入如下内容:

maven-nexusadminadmin123

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

server元素中的username和password你们根据自己的去编辑,我这边密码设置的是admin123

方式1示例

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p8wFia3S-1629908579998)(media/3407681c505b7360a6afb7c051ba6eb8.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TiHGQO9o-1629908580000)(media/7a09769e6fc44592cb846934254af88c.png)]

点击Next,输入Project name 为maven-chat05,如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kX9z5Ekz-1629908580002)(media/e8d9ffeb4423f770d477aa5336700ce2.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OGf0KgW6-1629908580003)(media/1eb26016123bacab90b88f65682e3b16.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mmJPsPx0-1629908580005)(media/e10c23f2f5b146d7d9963f94e5226e17.png)]

点击上面的OK完成配置。

还原~/.m2/settings.xml的配置到初始状态,操作如下:

将M2_HOME/conf/settings.xml复制熬~/.m2/settings.xml目录,如果存在先备份一个,然后进行覆盖。

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

 version="1.0" encoding="UTF-8"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"4.0.0com.javacode2018maven-chat051.0-SNAPSHOTcom.alibabafastjson1.2.62maven-nexushttp://localhost:8081/repository/maven-public/truetrue

删除本地仓库中以下几个目录:

~\.m2\repository\com\alibaba

maven-chat05项目目录中打开cmd运行:

mvn compile

见证奇迹的时刻,输出如下:

D:\code\IdeaProjects\maven-chat05>mvn compile
[INFO] Scanning  projects...
[INFO]
[INFO] -------------------< com.javacode2018:maven-chat05 >--------------------
[INFO] Building maven-chat05 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from maven-nexus: http:
Downloaded from maven-nexus: http:
Downloading from maven-nexus: http:
Downloaded from maven-nexus: http:
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-resources) @ maven-chat05 ---
[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 (-compile) @ maven-chat05 ---
[INFO] Nothing to compile - all classes are up to date
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  16.083 s
[INFO] Finished at: 2019-11-13T15:45:44+08:00
[INFO] ------------------------------------------------------------------------

从输出中可以看出fastjson这个jar包从maven-nexus中下载了,下载地址正是我们nexus私服中的那个地址。

方式2:镜像方式

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

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

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

mirror-nexus*nexus镜像http://localhost:8081/repository/maven-public/

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

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

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

mirror-nexusadminadmin123

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

方式2示例

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

修改pom.xml,内容如下:

 version="1.0" encoding="UTF-8"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"4.0.0com.javacode2018maven-chat051.0-SNAPSHOTcom.alibabafastjson1.2.62

~/.m2/settings.xmlservers元素中加入下面内容:

mirror-nexusadminadmin123

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

~/.m2/settings.xmlmirrors元素中加入下面内容:

mirror-nexus*nexus镜像http://localhost:8081/repository/maven-public/

删除本地仓库中以下几个目录:

~\.m2\repository\com\alibaba

maven-chat05项目目录中打开cmd运行:

mvn compile

见证奇迹的时刻,输出如下:

D:\code\IdeaProjects\maven-chat05>mvn compile
[INFO] Scanning  projects...
[INFO]
[INFO] -------------------< com.javacode2018:maven-chat05 >--------------------
[INFO] Building maven-chat05 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from mirror-nexus: http:
Downloaded from mirror-nexus: http:
Downloading from mirror-nexus: http:
Downloaded from mirror-nexus: http:
Downloading from mirror-nexus: http:
Downloaded from mirror-nexus: http:
Downloading from mirror-nexus: http:
Downloaded from mirror-nexus: http:
Downloading from mirror-nexus: http:
Downloaded from mirror-nexus: http:
Downloading from mirror-nexus: http:
Downloaded from mirror-nexus: http:
[INFO] Nothing to compile - all classes are up to date
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  02:23 min
[INFO] Finished at: 2019-11-13T16:05:43+08:00
[INFO] ------------------------------------------------------------------------

输出内容比较多,只截取了部分输出,从输出中可以看出fastjson这个jar包从mirror-nexus中下载了,下载地址正是我们nexus私服中的那个地址,镜像的方式起效了,是不是感觉很爽,哈哈!

本地构件发布到私服

经常用到的有2种

  1. 使用maven部署构件至nexus私服

  2. 手动部署第三方构件至nexus私服:比如我们第三方发给我们的一个包,比如短信发送商的jar包,这个包远程仓库是不存在的,我们要把这个包上传到私服供所有开发使用。

下面我们来看一下这两种如何操作。

使用maven部署构件至nexus私服

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rksp3bNn-1629908580007)(media/556d845b8c4792f01e5d3989d6efb8dc.png)]

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

第2个红框的maven-snapshots宿主仓库用来存放用户snapshot版本的构件。

上面两个仓库的地址可以点击后面的copy按钮获取。

操作分为3步

第一步:修改pom.xml配置

我们需要将本地maven项目的构件发布到上面宿主仓库中,需要修改项目中pom.xml的配置,加入下面内容:

release-nexushttp://localhost:8081/repository/maven-releases/nexus私服中宿主仓库->存放/下载稳定版本的构件snapshot-nexushttp://localhost:8081/repository/maven-snapshots/nexus私服中宿主仓库->存放/下载快照版本的构件

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

第二步:修改settings.xml

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

release-nexusadminadmin123snapshot-nexusadminadmin123

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

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

第三步:执行mvn deploy命令

执行这个命令的时候,会对构件进行打包,然后上传到私服中。

这命令的原理,后面的文章中会具体介绍。

示例效果

我们来感受一下效果。

按照上面的配置修改maven-chat03/pom.xml文件和本地的~/.m2/settings.xml文件。

maven-chat05项目目录中打开cmd运行:

mvn deploy

见证奇迹的时刻,输出如下:


D:\code\IdeaProjects\maven-chat05>mvn deploy
[INFO] Scanning  projects...
[INFO]
[INFO] -------------------< com.javacode2018:maven-chat05 >--------------------
[INFO] Building maven-chat05 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-resources) @ maven-chat05 ---
[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 (-compile) @ maven-chat05 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (-testResources) @ maven-chat05 ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\code\IdeaProjects\maven-chat05\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (-testCompile) @ maven-chat05 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (-test) @ maven-chat05 ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (-jar) @ maven-chat05 ---
[INFO]
[INFO] --- maven-install-plugin:2.4:install (-install) @ maven-chat05 ---
[INFO] Installing D:\code\IdeaProjects\maven-chat05\target\maven-chat05-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\maven-chat05\1.0-SNAPSHOT\maven-chat05-1.0-SNAPSHOT.jar
[INFO] Installing D:\code\IdeaProjects\maven-chat05\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\maven-chat05\1.0-SNAPSHOT\maven-chat05-1.0-SNAPSHOT.pom
[INFO]
[INFO] --- maven-deploy-plugin:2.7:deploy (-deploy) @ maven-chat05 ---
Downloading from snapshot-nexus: http:
Uploading to snapshot-nexus: http:
Uploaded to snapshot-nexus: http:
Uploading to snapshot-nexus: http:
Uploaded to snapshot-nexus: http:
Downloading from snapshot-nexus: http:
Uploading to snapshot-nexus: http:
Uploaded to snapshot-nexus: http:
Uploading to snapshot-nexus: http:
Uploaded to snapshot-nexus: http:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  6.156 s
[INFO] Finished at: 2019-11-13T16:38:20+08:00
[INFO] ------------------------------------------------------------------------

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

我们去nexus私服中看一下,访问nexus私服中快照版本仓库的地址:

http:

出现如下页面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HoCCjNcR-1629908580008)(media/d653b94c42b33f97f70651ad77a9b938.png)]

点击上面的bowse连接,如下图,我们的构件上传成功了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XzgVwMPR-1629908580010)(media/cb5dd93cc9764fea5da057ffaab75f24.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OdUQnJ3n-1629908580011)(media/4bbe9881f52478db6494a72cc0e5c5bf.png)]

上面是将快照版本的发布到了nexus私服的快照宿主仓库了,下面我们再来操作一下将release稳定版本的发布到nexus私服,如下:

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

1.0

cmd命令中执行:

mvn deploy

输出:

D:\code\IdeaProjects\maven-chat05>mvn deploy
[INFO] Scanning  projects...
[INFO]
[INFO] -------------------< com.javacode2018:maven-chat05 >--------------------
[INFO] Building maven-chat05 1.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-resources) @ maven-chat05 ---
[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 (-compile) @ maven-chat05 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (-testResources) @ maven-chat05 ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\code\IdeaProjects\maven-chat05\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (-testCompile) @ maven-chat05 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (-test) @ maven-chat05 ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (-jar) @ maven-chat05 ---
[INFO] Building jar: D:\code\IdeaProjects\maven-chat05\target\maven-chat05-1.0.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (-install) @ maven-chat05 ---
[INFO] Installing D:\code\IdeaProjects\maven-chat05\target\maven-chat05-1.0.jar to C:\Users\Think\.m2\repository\com\javacode2018\maven-chat05\1.0\maven-chat05-1.0.jar
[INFO] Installing D:\code\IdeaProjects\maven-chat05\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\maven-chat05\1.0\maven-chat05-1.0.pom
[INFO]
[INFO] --- maven-deploy-plugin:2.7:deploy (-deploy) @ maven-chat05 ---
Uploading to release-nexus: http:
Uploaded to release-nexus: http:
Uploading to release-nexus: http:
Uploaded to release-nexus: http:
Downloading from release-nexus: http:
Uploading to release-nexus: http:
Uploaded to release-nexus: http:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.646 s
[INFO] Finished at: 2019-11-13T16:48:44+08:00
[INFO] ------------------------------------------------------------------------

输出中有release-nexus,说明使用了pom.xml中的distributionManagement->repository->id的值,上传地址是http://localhost:8081/repository/maven-releases

打开nexus私服中release地址:

http:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pS7k7KuO-1629908580013)(media/d46ba9775d0b0a628058156db785bdc3.png)]

点击上面的browse连接,如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6YNL6phy-1629908580015)(media/e98bda00f2b7633e4abdd6e7f1edb86e.png)]

成功了,是不是感觉很爽。

使用注意

snapshot属于快照版本,同一个snapshot版本的构件可以重复部署到私服中,如果私服中已经存在了则会进行覆盖掉。

而release是稳定版本的构件,重复部署会报错,我们来演示一下,如下:

修改将pom.xml中的version修改为快照版本的,如下:

1.0-SNAPSHOT

再次部署,如下:

D:\code\IdeaProjects\maven-chat05>mvn deploy
[INFO] Scanning  projects...
[INFO]
[INFO] -------------------< com.javacode2018:maven-chat05 >--------------------
[INFO] Building maven-chat05 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-resources) @ maven-chat05 ---
[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 (-compile) @ maven-chat05 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (-testResources) @ maven-chat05 ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\code\IdeaProjects\maven-chat05\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (-testCompile) @ maven-chat05 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (-test) @ maven-chat05 ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (-jar) @ maven-chat05 ---
[INFO] Building jar: D:\code\IdeaProjects\maven-chat05\target\maven-chat05-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (-install) @ maven-chat05 ---
[INFO] Installing D:\code\IdeaProjects\maven-chat05\target\maven-chat05-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\maven-chat05\1.0-SNAPSHOT\maven-chat05-1.0-SNAPSHOT.jar
[INFO] Installing D:\code\IdeaProjects\maven-chat05\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\maven-chat05\1.0-SNAPSHOT\maven-chat05-1.0-SNAPSHOT.pom
[INFO]
[INFO] --- maven-deploy-plugin:2.7:deploy (-deploy) @ maven-chat05 ---
Downloading from snapshot-nexus: http:
Downloaded from snapshot-nexus: http:
Uploading to snapshot-nexus: http:
Uploaded to snapshot-nexus: http:
Uploading to snapshot-nexus: http:
Uploaded to snapshot-nexus: http:
Downloading from snapshot-nexus: http:
Downloaded from snapshot-nexus: http:
Uploading to snapshot-nexus: http:
Uploaded to snapshot-nexus: http:
Uploading to snapshot-nexus: http:
Uploaded to snapshot-nexus: http:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.363 s
[INFO] Finished at: 2019-11-14T14:50:59+08:00
[INFO] ------------------------------------------------------------------------

成功了。

我们再来看看release版本的,修改pom.xml中的version:

1.0

再次部署,如下:

D:\code\IdeaProjects\maven-chat05>mvn deploy
[INFO] Scanning  projects...
[INFO]
[INFO] -------------------< com.javacode2018:maven-chat05 >--------------------
[INFO] Building maven-chat05 1.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-resources) @ maven-chat05 ---
[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 (-compile) @ maven-chat05 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (-testResources) @ maven-chat05 ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\code\IdeaProjects\maven-chat05\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (-testCompile) @ maven-chat05 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (-test) @ maven-chat05 ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (-jar) @ maven-chat05 ---
[INFO] Building jar: D:\code\IdeaProjects\maven-chat05\target\maven-chat05-1.0.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (-install) @ maven-chat05 ---
[INFO] Installing D:\code\IdeaProjects\maven-chat05\target\maven-chat05-1.0.jar to C:\Users\Think\.m2\repository\com\javacode2018\maven-chat05\1.0\maven-chat05-1.0.jar
[INFO] Installing D:\code\IdeaProjects\maven-chat05\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\maven-chat05\1.0\maven-chat05-1.0.pom
[INFO]
[INFO] --- maven-deploy-plugin:2.7:deploy (-deploy) @ maven-chat05 ---
Uploading to release-nexus: http:
Uploading to release-nexus: http:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.967 s
[INFO] Finished at: 2019-11-14T14:54:12+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (-deploy) on project maven-chat05: Failed to deploy artifacts: Could not transfer artifact com.javacode2018:maven-chat05:jar:1.0 from/to release-nexus (http:
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e .
[ERROR] Re-run Maven using the -X  to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http:

输出中有400ERROR日志,部署失败。

手动部署构件至nexus私服

操作步骤

手动上传只支持发布稳定版本的构件,操作过程如下图:

登录nexus,按照下图的步骤依次点击:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vIee2bta-1629908580016)(media/23b610e1db1e9a0149a0cb11583d4618.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8WoEyQaG-1629908580018)(media/a11efc6e3601935a5f7123afa76a9d6f.png)]

上面页面中点击Browse选择本地的构件,然后输入其他坐标信息,点击Upload完成上传操作。

示例效果

我们把maven-chat05\target\maven-chat05-1.0.jar上传上去,如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BatYr8f7-1629908580019)(media/970a8647f8d6294eb8f6f53190a61505.png)]

点击Upload完成上传操作。

访问如下地址:

http:

可以看到上传好的构件,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GRzBHhJi-1629908580021)(media/c5cd7f2badffde88d6cc98457a118ff1.png)]

总结

本文90%是实操部分,强烈建议大家去操作一遍,加深理解。如果有收获的帮忙分享一下,你们的支持也是我不断输出的一个动力,希望大家都能够学到东西!

Maven系列目录

  1. Maven系列:第1篇:Maven未出世前,我们那些痛苦的经历!

  2. Maven系列第2篇:安装、配置、mvn运行过程详解

  3. Maven系列第3篇:详解maven解决依赖问题

  4. Maven系列第4篇:仓库详解


输出中有`400`的`ERROR`日志,部署失败。### 手动部署构件至nexus私服#### 操作步骤**手动上传只支持发布稳定版本的构件**,操作过程如下图:登录nexus,按照下图的步骤依次点击:[外链图片转存中...(img-vIee2bta-1629908580016)]图中第一行`maven-releases`宿主仓库就是存放用户自己构件的仓库,点击上图中列表中的第一行,进入上传页面,如下图:[外链图片转存中...(img-8WoEyQaG-1629908580018)]上面页面中点击`Browse`选择本地的构件,然后输入其他坐标信息,点击`Upload`完成上传操作。#### 示例效果我们把`maven-chat05\target\maven-chat05-1.0.jar`上传上去,如下:[外链图片转存中...(img-BatYr8f7-1629908580019)]点击`Upload`完成上传操作。访问如下地址:

http:


可以看到上传好的构件,如下图:[外链图片转存中...(img-GRzBHhJi-1629908580021)]## 总结**本文90%是实操部分,强烈建议大家去操作一遍,加深理解。如果有收获的帮忙分享一下,你们的支持也是我不断输出的一个动力,希望大家都能够学到东西!**## Maven系列目录1.  Maven系列:第1篇:Maven未出世前,我们那些痛苦的经历!2.  Maven系列第2篇:安装、配置、mvn运行过程详解3.  Maven系列第3篇:详解maven解决依赖问题4.  Maven系列第4篇:仓库详解

Maven笔记 - 第五章相关推荐

  1. Programming Entity Framework-dbContext 学习笔记第五章

    ### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...

  2. 深入理解 C 指针阅读笔记 -- 第五章

    Chapter5.h #ifndef __CHAPTER_5_ #define __CHAPTER_5_/*<深入理解C指针>学习笔记 -- 第五章*//*不应该修改的字符串就应该用 co ...

  3. [云炬创业基础笔记]第五章创业机会评估测试2

    [云炬创业基础笔记]第五章创业机会评估测试1

  4. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

  5. 《金融学》笔记 第五章 金融市场

    <金融学>笔记 第五章 金融市场 前言 在<<金融学>笔记>中开了一个头,现在完善具体细节. 金融范畴篇 第一章 货币的本质 第二章 货币制度 第三章 信用.利息和 ...

  6. 《Python从入门到实践》读书笔记——第五章 if语句

    <Python从入门到实践>读书笔记--第五章 if语句 1. 一个简单示例 cars = ['audi', 'bwm', 'subaru', 'toyota']for car in ca ...

  7. Unity 游戏黑暗之光笔记第五章 背包系统的实现

    Unity 游戏黑暗之光笔记 第五章 背包系统的实现 详细过程参考,笔者一直有BUG--导致后面的很多内容没法写全 1.开发功能按钮 注意Anchors的位置,可以让图标在窗口变化时保持相对位置不会变 ...

  8. 《深度探索C++对象模型》读书笔记第五章:构造析构拷贝语意学

    <深度探索C++对象模型>读书笔记第五章:构造析构拷贝语意学 对于abstract base class(抽象基类),class中的data member应该被初始化,并且只在constr ...

  9. 《Java 核心技术 卷1》 笔记 第五章 继承(3)

    5.1.6 抽象类 有时候我们无法说出具体是什么,只能用于标识一个类型,比如图形,就可作为抽象类.虽然无法具体描述图形,但是图形通常都有面积.周长.这种时候就可用抽象类标识. 抽象类使用abstrac ...

最新文章

  1. php上传过滤,编写PHP脚本过滤用户上传的图片_PHP
  2. python自动化干什么-高效工作,拒绝加班,看Python自动化功能到底有多强大
  3. C++面向对象基础(二)
  4. 如何在C++Builder中使用全局变量
  5. 二维计算几何基础知识
  6. 如何自定义Tableau 调色板
  7. SpringSecurity OAuth2介绍
  8. 局部遮罩 shade(二)
  9. EMVTag系列3《持卡人基本信息数据》
  10. python程序设计课程设计_《Python程序设计》教学大纲.doc
  11. linux域文件夹权限设置密码,如何配置Linux 文件权限(经典详细版本: rwxst)
  12. bzoj 3403: [Usaco2009 Open]Cow Line 直线上的牛
  13. 图像均值滤波简介及实现
  14. ofbiz中用 ajax 几点注意
  15. 基于多尺度稀疏表示的视网膜OCT图像阴影修复
  16. html5游戏 搭积木,搭积木游戏
  17. AMD CPU 开启Android Studio emulator虚拟机
  18. 排座系统c语言,2008noip排座位C语言详解.doc
  19. matlab数字图像处理——图像的读写,灰度、二值图像
  20. BUCT数据结构——图(拓扑排序、关键路径)

热门文章

  1. 十大交易系统源码 (http://bbs.tb18.net/forum.php?mod=viewthreadaction=printabletid=22501)
  2. 魅族公司给M8手机第三方软件开发者赠送中秋月饼
  3. 2022美国大学生数学建模竞赛F题思路
  4. 【数学】C107_LQ_报纸页数 平方怪圈 猴子分香蕉 方格计数 矩形切割(归纳法 | 打印归纳)
  5. js精度计算问题,结合decimaljs的解决方法
  6. nested exception is java.lang.NoClassDefFoundError
  7. hive时间戳格式化HH和hh的区别
  8. 程序员必看的数组详解!
  9. PLC-Recorder进行罗克韦尔(原AB)PLC数据采集的一些技巧
  10. java access jdbc_JAVA软件逆向之hxtt的Access_JDBC30.jar