Advertisement

Maven笔记 - 第五章

阅读量:

第5篇:私服详解

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

这是maven系列第5篇。

本系列内容前后相互关联,在阅读时请特别注意各章节之间的逻辑联系。若读者未曾接触过Maven工具,请耐心从第一篇文章开始阅读本文,并参考文章末尾附有的完整Maven系列链接获取更多信息。

环境

maven3.6.1

开发工具idea

jdk1.8

本篇内容

私服介绍

windows中安装nexus私服

linux中安装nexus私服

nexus私服中各种仓库详解

配置本地Maven从nexus下载构件

将本地构件发布到私服的2种方式详解

总结

上一篇文章中有提到了私服,我们再来回顾一下私服相关的内容。

私服

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

当一个团队由数百人组成,并采用Maven进行项目管理时,在项目的依赖关系处理上会遇到一定的挑战。每位开发人员都需要从远程仓库下载所需的构建模块。这种操作对公司的网络环境提出了较高的要求。为了提高访问速度和减少带宽消耗,在公司内部局域网上部署一台服务器是必要的选择。这台服务器充当了一个代理节点,在所有开发人员可以通过这台服务器获取所需资源的情况下提供服务。当这些构建模块被请求时,如果该代理节点无法满足需求,则会向远程仓库发起查询请求,并将其下载至该代理节点上后返回给对应的开发人员本地存储位置。

此外,在公司内部存在多个项目之间相互依赖的情况。比如你可能属于架构团队。因此需要我们开发一些Java包(jar)以便供其他团队使用。这时建议将这些Java包通过私服服务器分发给其他同事。如果没有专门的服务器(sfw)可用,在这种情况下则可能需要手动发送至其他人手中或者上传至共享机器上。但这种方式在日常管理中并不十分高效。

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

加速maven构件的下载速度

节省宽带,加速项目构建速度

方便部署自己的构件以供他人使用

为了确保中央仓库能够正常运行,必须保证本地主机能够直接连接到互联网.如果选择部署云服务器,则无需担心本地主机仅限于内部网络的限制.

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

  1. Apache基金会的archiva
复制代码
    http:
  1. JFrog的Artifactory
复制代码
    https:
  1. Sonatype的Nexus
复制代码
    https:

这类软件均为开源类型,并且都允许自由使用。其中应用最广泛的当属基于Linux系统的第三类Nexus服务器,在本文中将对此进行详细讲解。另外两种如果有兴趣的话也可以深入研究。

Windows10中安装Nexus私服

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

安装jdk

按照官方指导文档所述,请您按照以下步骤操作:首先下载并安装 JDK 1.8 安装包;然后按照官方指导文档所述,请您按照以下步骤操作:请确保您的系统已满足 Java 7 或更高版本的要求;最后,请确保您的系统已满足 Java 7 或更高版本的要求。

下载nexus

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

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

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

nexus下载地址
复制代码
    https:

外部链接中的图片无法正常存储。可能导致无法访问该资源的情况,请确保网络连接正常后再尝试访问。建议您手动保存该图片文件后重新上传

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

解压latest-win64.zip

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

因无法正常显示...导致的问题可能导致图片无法正常显示...为了确保上传成功,请建议将图片保存后重新上传

启动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:

效果如下:

由于外链图片转存失败,建议将图片保存下来直接上传

登录Nexus

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

nexus这个版本的密钥是初次登录时创建的,在下方文件中包含:

复制代码
    安装目录/sonatype-work/nexus3/admin.password

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

由于图片无法正常转存,请检查目标服务器是否存在防盗链机制,并确保文件路径正确无误。您可以尝试将图片文件保存后重新上传至目标平台以解决此问题。(source link: media/7a7ba956b424e012bc405fc2c3a86b3c.png)

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

由于外链图片无法正常显示,请检查网络连接并尝试重新上传相关文件。(media/10ceec9fa80273a06452605b9ffbc7dc.png)

点击Next->Finish完成设置。

外部链接中的图片无法正常访问。可能存在防盗链设置阻止访问。建议您手动保存图片后重新上传

其他一些常见的操作

停止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。

由于外部链接中的图片无法正常上传,请检查网络连接并尝试重新插入相关文件

登录

用户名为admin,密码在

复制代码
    /opt/nexus/sonatype-work/nexus3/admin.password

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

Nexus中仓库分类

如前所述,请问用户是否可以通过Nexus接入远程仓库系统?可否将本地构建的服务模块上传至Nexus中?请阐述一下Nexus如何支持上述功能。

nexus中有一个存储库清单,在这个清单中汇聚了丰富的多类存储库资源

该外链图片无法正常显示,请您参考以下信息:由于网站可能存在防盗链保护机制(img-to2qQTAG-1629908579980),建议您将相关媒体文件(media/4a97266b218b430031041c09da041e8e.png)保存后重新上传至平台以解决此问题

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

代理仓库

宿主仓库

仓库组

代理仓库

代理仓库的主要目的是让用户无需直接访问外部第三方远程仓库即可完成远程依赖管理。例如, 通过代理仓库, 可以方便地访问像Maven中央仓 官网提供的远程仓 库以及阿里 云Maven仓 库等资源。这些代 码仓会从被代 码仓中自动下载所需的构建包, 并将其缓 存到本地缓存 区供后续操作 使用。

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

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

由于存在防盗链机制导致无法显示外链图片,并建议用户将图片保存后重新上传

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

外部链接中的图片无法正常存取, 可能存在防盗链保护机制, 建议尝试保存该文件至本地后再上传

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

由于外链图片存储功能受限img-gffaofql-1629908579986,建议您采取以下措施:一是检查目标网站是否启用了防盗链功能;二是您可以将图片文件本地保存后重新尝试上传

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

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

外部链接中的图片无法正常上传(媒体来源:ac861d6bdf4ecd6ac68f945faf323c64.png)。由于目标网站可能存在防盗链设置,请尝试将图片保存后重新上传。

宿主仓库

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

为了方便其他员工查阅和使用,在宿主机仓库系统里提交了部分私有组件

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

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

仓库组

maven用户可以从前沿仓和本地仓中下载组件至本地仓。为了简化操作流程,maven提供了一个名为"仓群"的集合,该集合包括多个前沿库和基础库,通过访问该特定集合即可间接获取其中所有库的信息。这些子资源是按照一定的顺序排列,当系统从该集合开始搜索组件时会依次检查每个存储位置,找到后就会立即返回给本地存储位置。因此在实际应用中我们通常会将运行速度较快的组件优先放置在较高的层级位置

实际上该仓库组内部本身没有配置任何构建模块 仅仅负责将maven用户发起的下载组件请求转发给组内的其他仓库 进行处理

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

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

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

建议将图片保存下来直接上传

上图中第一个红框是该仓库组对外提供的一个URL地址,在线访问该URL地址即可通过Maven从该仓库组下载相应的组件到本地项目仓库

位于此红框中的成员包括了三个不同的存储空间:一个是宿主机的发布版本库;另一个是即时快照存储库;第三个则是一个基于maven社区中心仓代理运行的空间。

刚才我们新增了maven-aliyun在左边,并将其也被加入到了右边的仓库成员(Members)列表中。
然后我们将这个仓库放置在第3位。
相比而言,这个仓库的速度上更优一些。
它能够帮助我们加速下载maven构件的速度。

如下图:

该来源可能存在防盗链设置问题,请避免重复上传图片。可采取措施将文件保存后再上传至目标平台。

配置本地Maven从nexus下载构件

介绍2种方式

方式1:pom.xml的方式

本次操作将从nexus默认仓库组中提取构件,并随后我们获取了该仓库组对外提供的地址。在确认无误后,请单击下图中的copy按钮以获取仓库组的地址信息,并注意点击copy按钮后,默认情况下会显示复制的链接。

外部链接中的图片无法正常加载,请确保将图片保存后重新上传至该来源网站。(media/bcda03ea71140152be040d5aba9b717c.png)

外部链接中的图片无法正常上传,请您尝试将图片保存后再直接上传至该平台

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

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

复制代码
    <repositories>
    <repository>
        <id>maven-nexus</id>
        <url>http:
        <releases>
            <enabled></enabled>
        </releases>
        <snapshots>
            <enabled></enabled>
        </snapshots>
    </repository>
    </repositories>

为了访问nexus私服平台(如游戏或应用),通常需要提供用户名和密码进行身份验证。因此必须设置相应的凭证信息。这些凭证信息应首先配置到$settingPath/settings.xml文件中,并具体配置内容应放置于该目录下的servers子元素中。

复制代码
      maven-nexus
      admin
      admin123

请务必确保在POM.xml中的repository->id字段与上一步骤中的server->id字段具有相同的值,并利用该id关联查找相应的凭证。

在server元素的username和password字段中,请按照各自的设置进行操作;在我的服务器中设置了admin123作为默认密码。

方式1示例

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

建议先将图片保存至本地设备后进行重新上传

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

外部链接中的图片无法正常显示(img-TiHGQO9o-1629908580000)

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

外链图片无法正常上传至平台中,请您先将图片保存至本地设备后再进行直接上传操作。由于可能存在防盗链等技术限制因素导致上传异常,请确保您已按照要求完成相关设置与操作流程。建议您先将待上传图片文件命名为具有明确文件格式标识的名称,并选择合适的分辨率与质量参数设置以提高上传成功率。如果问题持续存在,请联系平台客服获取进一步的技术支持与解决方案指导

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

...外链可能因防盗链机制导致无法正常显示,请您尝试将图片保存后再进行重新上传操作。

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

外链图片转存失败的原因可能与服务器端防盗链设置或网络环境配置有关

点击上面的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.0
    
    com.javacode2018
    maven-chat05
    1.0-SNAPSHOT
    
    
        
            com.alibaba
            fastjson
            1.2.62
        
    
    
    
        
            maven-nexus
            http://localhost:8081/repository/maven-public/
            
                true
            
            
                true

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

复制代码
    ~\.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中仓库组的地址,上面方式一中有说过。

因为nexus的URL通常需要用户名和密码才能访问,因此建议在指定位置添加相应的认证配置项

复制代码
      mirror-nexus
      admin
      admin123

特别注意,在前一位置上的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.0
    
    com.javacode2018
    maven-chat05
    1.0-SNAPSHOT
    
    
        
            com.alibaba
            fastjson
            1.2.62

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

复制代码
      mirror-nexus
      admin
      admin123

注意上面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] ------------------------------------------------------------------------

对于输出信息量较大的内容分析较多

本地构件发布到私服

经常用到的有2种

使用maven部署构件至nexus私服

手动操作第三方组件至Nexus服务端:例如我们从第三方获得的一个资源块(如短信发送商提供的jar包),该资源块在远程仓库中不存在我们需要将其上传至Nexus服务端以便所有开发者使用。

手动操作第三方组件至Nexus服务端:例如我们从第三方获得的一个资源块(如短信发送商提供的jar包),该资源块在远程仓库中不存在我们需要将其上传至Nexus服务端以便所有开发者使用。

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

使用maven部署构件至nexus私服

当我们搭建Maven项目的框架时,我们会得到一个名为pom.xml的配置文件。在其中包含一个version元素的地方,默认设置为1.0-SNAPSHOT。具体来说,请参考我们刚刚构建的maven-chat05项目实例。此构件的当前版本号为1.0-SNAPSHOT;带以-_SNAPSHOT后缀的就是快照版本。这些快照版本通常处于不稳定状态,会经历反复发布、测试、修改和再发布的过程;而最终我们会选择一个稳定可靠的release版本作为正式发布版,并放弃带有-_SNAPSHOT后缀的形式。

在nexus私服中存储用户的组件时采用了宿主仓库这一机制。这部分内容我们在之前已经讨论过,在这里不做详细重复。具体来说,在nexus私服环境中,默认提供了两个宿主仓库分别用于存储SNAPSHOT版本和release版本组件。其中SNAPSHOT版本主要用于短时间内的缓存操作而不会影响最终发布版本的内容 release则用于最终发布系统所需的各种组件维护与更新

由于图片无法正常转存,请您核实一下网络连接情况并尝试重新上传

在页面中的第一个标注框中标注的maven-releases宿主仓库负责存储用户自定义版本组件。

第二个主元框中的maven-snapshots宿主存储库专门用于存储用户的截取版本组件。

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

操作分为3步
第一步:修改pom.xml配置

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

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

第二步:修改settings.xml

该地址需通过认证才能访问, 因此必须设置认证凭证以完成访问请求. 该配置内容应存于~/.m2/settings.xml文件中, 具体操作如下:

复制代码
      release-nexus
      admin
      admin123
    
    
    
      snapshot-nexus
      admin
      admin123

请特别注意以下事项:在配置中设置的第一个服务ID字段必须与pom.xml文件中分布管理下的仓库ID字段相同。

第二个构建任务中涉及的server节点ID应与pom.xml文件中distributionManagement下的snapshotRepository属性所指定的ID保持一致

第三步:执行mvn deploy命令

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

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

示例效果

我们来感受一下效果。

基于上文设定的参数位置,请您调整本地maven-chat03/pom.xml和系统根目录下的~/.m2/settings.xml这两个maven-project/setting.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也是我们在pom.xml配置的快照版本地址上的操作,并且已经成功实现了上传。

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

复制代码
    http:

出现如下页面:

由于外链图片无法进行存储(图),可能导致网络连接不稳定或被相关平台限制访问(注)

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

建议将图片保存后再重新上传至该链接地址

当同事们需要调用该构件时,请您只需单击此页面下方的图片区域。系统会自动展示该构件的位置坐标,请您即可方便地获取该组件。如上文所示。

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

上文已经实现了对快照宿主仓库中快照版本的成功发布。现我们来进行下一步操作,请您做好以下准备:已准备将 release 稳定版本发布至 nexus私服,请参考以下说明进行操作。

更新pom.xml文件中的版本号设置,在移除该版本标识符后即可确定为已发布版本了。

复制代码
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:

外部链接无法正常访问,可能存在防盗链保护机制,请确保将图片保存后再上传

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

该外链图片无法显示,请检查链接完整性并重新尝试上传

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

使用注意

Snapshot是快照版本的一种。
对于同一份Snapshot来说,允许其重新部署至后端服务。
在后端服务已有的情况下,会导致该Snapshot被覆盖。

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

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

复制代码
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:

复制代码
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,按照下图的步骤依次点击:

该图片无法通过外链上传至您的系统中,请您参考以下方法:将图片保存后直接上传至目标平台。

在上图的第一行中使用的是maven-releases作为宿主仓库。
单击上图列表中的第一条项以访问构建界面。
如下图:

外部链接中的图片无法正常加载...请参考该平台上的官方文档以获取详细操作说明

在页面编辑器中,首先单击Browse按钮以获取本地构建文件;接着手动输入其他坐标参数,并单击Upload按钮完成数据提交。

示例效果

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

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

点击Upload完成上传操作。

访问如下地址:

复制代码
    http:

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

由于外链图片转存失败的原因可能导致无法正常显示图片内容,请确保将图片保存后再进行上传操作以避免相关技术限制

总结

本文约90%内容属于实践操作环节,请建议大家亲自参与实践操作以加深对相关知识的理解。如能获得实际操作经验并分享心得,则会获益匪浅。您的支持是我持续创作的动力源泉,请相信通过动手实践和深入思考,则一定能够有所收获与成长。

Maven系列目录

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

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

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

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篇:仓库详解

全部评论 (0)

还没有任何评论哟~