Maven第5篇:手把手教你搭建私服

2023-11-16

Maven第5篇:手把手教你搭建私服

环境

  • maven3.6.1
  • 开发工具idea
  • jdk1.8

本篇内容

  • 私服介绍
  • windows中安装nexus私服
  • linux中安装nexus私服
  • nexus私服中各种仓库详解
  • 配置本地Maven从nexus下载构件
  • 将本地构件发布到私服的2种方式详解

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

私服

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

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

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

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

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

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

Apache基金会的archiva

http://archiva.apache.org/

JFrog的Artifactory

https://jfrog.com/artifactory/

Sonatype的Nexus

https://my.sonatype.com/

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

Windows10中安装Nexus私服

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

安装jdk

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

下载nexus

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

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

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

nexus下载地址
https://help.sonatype.com/repomanager3/download

解压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://localhost:8081/

效果如下:

在这里插入图片描述

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

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

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

登录成功后会弹出一些设置

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

点击Next->Finish完成设置。

在这里插入图片描述

其他一些常见的操作

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

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

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

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

Linux安装Nexus私服

下载安装包

解压

[root@test1117 nexus]# tar -zvxf latest-unix.tar.gz
[root@test1117 nexus]# ls
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://nexus私服所在的机器ip:8081/

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

在这里插入图片描述

登录
用户名为admin,密码在

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

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

Nexus中仓库分类

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

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

在这里插入图片描述

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

  • 代理仓库
  • 宿主仓库
  • 仓库组

代理仓库

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

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

Nexus仓库列表中点击Create repository按钮,

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

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

在这里插入图片描述

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

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

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

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

在这里插入图片描述

宿主仓库

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

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

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

仓库组

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

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

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

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

在这里插入图片描述

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

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

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

在这里插入图片描述

配置本地Maven从nexus下载构件

介绍2种方式

方式1:pom.xml的方式

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

在这里插入图片描述

在这里插入图片描述

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

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

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

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

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

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

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

方式1示例
创建一个maven项目,打开idea,点击File->New->Project,选择Maven,

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

点击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文件,内容如下:

<?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.javacode2018</groupId>
    <artifactId>maven-chat05</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://localhost:8081/repository/maven-public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

</project>

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

~\.m2\repository\com\alibaba

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

mvn compile

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

D:\code\IdeaProjects\maven-chat05>mvn compile
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< com.javacode2018:maven-chat05 >--------------------
[INFO] Building maven-chat05 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from maven-nexus: http://localhost:8081/repository/maven-public/com/alibaba/fastjson/1.2.62/fastjson-1.2.62.pom
Downloaded from maven-nexus: http://localhost:8081/repository/maven-public/com/alibaba/fastjson/1.2.62/fastjson-1.2.62.pom (9.7 kB at 5.1 kB/s)
Downloading from maven-nexus: http://localhost:8081/repository/maven-public/com/alibaba/fastjson/1.2.62/fastjson-1.2.62.jar
Downloaded from maven-nexus: http://localhost:8081/repository/maven-public/com/alibaba/fastjson/1.2.62/fastjson-1.2.62.jar (658 kB at 70 kB/s)
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-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 (default-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>
  <id>mirror-nexus</id>
  <mirrorOf>*</mirrorOf>
  <name>nexus镜像</name>
  <url>http://localhost: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>admin123</password>
</server>

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

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

修改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.javacode2018</groupId>
    <artifactId>maven-chat05</artifactId>
    <version>1.0-SNAPSHOT</version>

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

</project>

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

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

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

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

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

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

~\.m2\repository\com\alibaba

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

mvn compile

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

D:\code\IdeaProjects\maven-chat05>mvn compile
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< com.javacode2018:maven-chat05 >--------------------
[INFO] Building maven-chat05 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from mirror-nexus: http://localhost:8081/repository/maven-public/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom
Downloaded from mirror-nexus: http://localhost: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://localhost:8081/repository/maven-public/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom
Downloaded from mirror-nexus: http://localhost: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://localhost:8081/repository/maven-public/org/apache/maven/maven-parent/22/maven-parent-22.pom
Downloaded from mirror-nexus: http://localhost: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://localhost:8081/repository/maven-public/org/apache/apache/11/apache-11.pom
Downloaded from mirror-nexus: http://localhost:8081/repository/maven-public/org/apache/apache/11/apache-11.pom (0 B at 0 B/s)
Downloading from mirror-nexus: http://localhost:8081/repository/maven-public/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.jar
Downloaded from mirror-nexus: http://localhost: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://localhost:8081/repository/maven-public/org/apache/maven/plugins/maven-compiler-plugin/3.1/maven-compiler-plugin-3.1.pom
Downloaded from mirror-nexus: http://localhost: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)
[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版本,如下图:

在这里插入图片描述

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

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

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

操作分为3步

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

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

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

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

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

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

注意上面第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 for projects...
[INFO]
[INFO] -------------------< com.javacode2018:maven-chat05 >--------------------
[INFO] Building maven-chat05 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-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 (default-compile) @ maven-chat05 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-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 (default-testCompile) @ maven-chat05 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ maven-chat05 ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ maven-chat05 ---
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-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 (default-deploy) @ maven-chat05 ---
Downloading from snapshot-nexus: http://localhost:8081/repository/maven-snapshots/com/javacode2018/maven-chat05/1.0-SNAPSHOT/maven-metadata.xml
Uploading to snapshot-nexus: http://localhost:8081/repository/maven-snapshots/com/javacode2018/maven-chat05/1.0-SNAPSHOT/maven-chat05-1.0-20191113.083820-1.jar
Uploaded to snapshot-nexus: http://localhost:8081/repository/maven-snapshots/com/javacode2018/maven-chat05/1.0-SNAPSHOT/maven-chat05-1.0-20191113.083820-1.jar (1.8 kB at 11 kB/s)
Uploading to snapshot-nexus: http://localhost:8081/repository/maven-snapshots/com/javacode2018/maven-chat05/1.0-SNAPSHOT/maven-chat05-1.0-20191113.083820-1.pom
Uploaded to snapshot-nexus: http://localhost:8081/repository/maven-snapshots/com/javacode2018/maven-chat05/1.0-SNAPSHOT/maven-chat05-1.0-20191113.083820-1.pom (1.2 kB at 10 kB/s)
Downloading from snapshot-nexus: http://localhost:8081/repository/maven-snapshots/com/javacode2018/maven-chat05/maven-metadata.xml
Uploading to snapshot-nexus: http://localhost:8081/repository/maven-snapshots/com/javacode2018/maven-chat05/1.0-SNAPSHOT/maven-metadata.xml
Uploaded to snapshot-nexus: http://localhost:8081/repository/maven-snapshots/com/javacode2018/maven-chat05/1.0-SNAPSHOT/maven-metadata.xml (772 B at 9.2 kB/s)
Uploading to snapshot-nexus: http://localhost:8081/repository/maven-snapshots/com/javacode2018/maven-chat05/maven-metadata.xml
Uploaded to snapshot-nexus: http://localhost:8081/repository/maven-snapshots/com/javacode2018/maven-chat05/maven-metadata.xml (286 B at 3.4 kB/s)
[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://localhost:8081/repository/maven-snapshots/

出现如下页面:

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

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

<version>1.0</version>

cmd命令中执行:

mvn deploy

输出:

D:\code\IdeaProjects\maven-chat05>mvn deploy
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< com.javacode2018:maven-chat05 >--------------------
[INFO] Building maven-chat05 1.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-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 (default-compile) @ maven-chat05 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-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 (default-testCompile) @ maven-chat05 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ maven-chat05 ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-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 (default-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 (default-deploy) @ maven-chat05 ---
Uploading to release-nexus: http://localhost:8081/repository/maven-releases/com/javacode2018/maven-chat05/1.0/maven-chat05-1.0.jar
Uploaded to release-nexus: http://localhost:8081/repository/maven-releases/com/javacode2018/maven-chat05/1.0/maven-chat05-1.0.jar (1.7 kB at 9.6 kB/s)
Uploading to release-nexus: http://localhost:8081/repository/maven-releases/com/javacode2018/maven-chat05/1.0/maven-chat05-1.0.pom
Uploaded to release-nexus: http://localhost:8081/repository/maven-releases/com/javacode2018/maven-chat05/1.0/maven-chat05-1.0.pom (1.2 kB at 12 kB/s)
Downloading from release-nexus: http://localhost:8081/repository/maven-releases/com/javacode2018/maven-chat05/maven-metadata.xml
Uploading to release-nexus: http://localhost:8081/repository/maven-releases/com/javacode2018/maven-chat05/maven-metadata.xml
Uploaded to release-nexus: http://localhost:8081/repository/maven-releases/com/javacode2018/maven-chat05/maven-metadata.xml (304 B at 4.3 kB/s)
[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://localhost:8081/repository/maven-releases/

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

在这里插入图片描述

成功了。

手动部署构件至nexus私服

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

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

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

点击Upload完成上传操作。

访问如下地址:

http://localhost:8081/#browse/browse:maven-releases

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

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven第5篇:手把手教你搭建私服 的相关文章

随机推荐

  • C语言基础入门48篇_46_malloc与free(malloc申请堆返回void要指针强转、free释放堆,只需堆内存首地址、malloc配合sizeof增加可读性、注意出{}作用域导致无法释放)

    从上篇C语言基础入门48篇 45 内存的分区 全局区 栈区 堆 全局区main执行前分配好 存储程序代码及全局变量 栈区M级别随着函数调用返回自动分配回收 存储局部变量 堆大量内存动态分配 回收的内存区域 知道 不管是全局区还是栈区的内存
  • IP地址、子网掩码、网络号、主机号、网络地址、主机地址以及ip段/数字-如192.168.0.1/24是什么意思?

    背景知识 IP地址 IP地址被用来给Internet上的电脑一个编号 大家日常见到的情况是每台联网的PC上都需要有IP地址 才能正常通信 我们可以把 个人电脑 比作 一台电话 那么 IP地址 就相当于 电话号码 而Internet中的路由器
  • ACMix:清华提出融合卷积与自注意力机制的模块

    前几天看了一篇由清华大学发表的融合卷积与自注意力机制的文章 其中将融合模块称为 ACMix 本文主要就其中的融合细节进行讲述 paper http arxiv org abs 2111 14556 code https github com
  • 利用Tensorflow构建CNN图像多分类模型及图像参数、数据维度变化情况实例分析

    本文以CIFAR 10为数据集 基于Tensorflow介绍了CNN 卷积神经网络 图像分类模型的构建过程 着重分析了在建模过程中卷积层 池化层 扁平化层 全连接层 输出层的运算机理 以及经过运算后图像尺寸 数据维度等参数的变化情况 CIF
  • Linux怎么重启文档,linux快速重启技巧

    技巧 Linux系统快速启动的十大秘诀 Linux需要重新启动是少有的 可是一旦需要 Linux启动常常是缓慢的 简单介绍一些加速的办法 其中一些方法不太难 1 撤消多余的服务 根据机器的用途 很多服务是不需要的 要是Linux只用作桌面
  • 常见30种数学建模模型_数学建模_隐马尔可夫模型HMM

    1 要解决的问题 例如 1 我要用键盘输入一大段文字 如果在手动输入时 能不能有一个输入法能猜测出我想要录入的句子供我选择 2 和别人对话 听到一串连续的声音 能不能有个机器能预测他实际想要表达的内容 3 希望根据当前天气的情况来预测未来天
  • tshark删除pcap文件中与网关通信的数据包

    与网关的通信一般是 192 168 0 1或192 168 1 1或其他的ip 需要明确网关ip 然后删除即可 tshark r 源数据包 pcap Y ip dst 192 168 1 1 Y ip src 192 168 1 1 w 保
  • 用C语言实现单链表的基本操作(附有完整代码)

    导语 无论是顺序存储结构还是链式存储结构 在内存中进行存放元素的时候 不仅需要存放该元素的相关信息 还需要存放该元素和其他元素之间的关系 而我们之前所学的顺序表 与生俱来 的物理结构自然地能够表达出元素和元素之间的关系 不需要额外的信息去表
  • 超详细!一文讲透机器视觉常用的 3 种“目标识别”方法

    来源 机器视觉沙龙 随着机器视觉技术的快速发展 传统很多需要人工来手动操作的工作 渐渐地被机器所替代 传统方法做目标识别大多都是靠人工实现 从形状 颜色 长度 宽度 长宽比来确定被识别的目标是否符合标准 最终定义出一系列的规则来进行目标识别
  • 软件测试面试题(持续更新)

    1 软件配置管理的作用 软件配置包括什么 软件配置管理 Software Configuration Management SCM 是一种标识 组织和控制修改的技术 软件配置管理应用于整个软件工程过程 在软件建立时变更是不可避免的 而变更加
  • 支付宝小程序IOS连接mqtt接收AMQJS0007E Socket error

    1 现象 支付宝小程序集成xmqtt js后 安卓可以正常连接服务器 接收发送消息 IOS连接服务器正常 但是无法接收稍长的字符串 支付宝小程序的真机调试报错AMQJS0007E Socket error 未能完成操作 OSStatus错误
  • BMC—服务器运维管理利器

    BMC全称BaseboardManagement Controller 通俗来讲 BMC是整个服务器单板的大管家 从一款服务器上电时刻 它的所有部件都归BMC来负责和管理 说到这里 大家可能已经了解BMC是与服务器有关的 但还是会有疑惑 B
  • Libevent使用例子,从简单到复杂

    转载请注明出处 http blog csdn net luotuo44 article details 39670221 本文从简单到复杂 展示如何使用libevent 网上的许多例子都是只有服务器端的 本文里面客户端和服务器端都有 以飨读
  • 算法设计与分析考试复习

    冒泡排序 排序思路 1 从第0个元素开始 每次用相邻的两个元素进行比较 2 一旦发现后面的一个元素小于我们前面的一个元素就交换位置 3 经过一轮冒泡排序比较之后最后一个元素就是最大值 4 排除最后一个元素 以此类推 每次比较完成后最大值都会
  • IDEA 断点调式按键/断点跳跃技巧

    一 调试按键的使用说明 对于我日常调试 Step Over Step Into使用最频繁 当然还有断点跳跃 1 Step Over 按照程序从上往下执行 遇到方法也点击这个 则跳过方法 方法其实直接执行完成 直接进入下一个语句 简单的方法或
  • 软件工程毕业设计选题大全 毕设题目推荐

    文章目录 0 前言 1 题目推荐 2 开题指导 2 1 起因 2 2 如何避坑 重中之重 2 3 为什么这么说呢 2 4 难度把控 2 5 题目名称 3 最后 0 前言 这是学长亲手整理的 软件工程毕设选题系列第三篇 都是经过学长精心审核的
  • 【Libevent】Libevent特征和事件集创建

    1 libevent特点 事件驱动 高性能 轻量级 专注于网络 跨平台 支持Windows Linux Linux Mac Os等 支持多种I O多路复用技术 epoll poll dev poll select kqueue等 支持I O
  • linux的thrift编译指南详细版(64位 + 32位)

    linux的thrift编译指南详细版 64位 32位 一 简介 二 编译 1 OpenSSL 2 libevent 3 boost 4 thrift 三 检查 四 总结 一 简介 thrift是使用IDL定义接口的支持多种开发语言的RPC
  • Spring Boot 2.x整合微信支付项目实战

    资料 zip 第 1 章项目介绍和前期准备 1 1 SpringBoot整合微信支付开发在线教育视频站点介绍 ts 1 2 中大型公司里面项目开发流程讲解 ts 1 3 在线教育站点需求分析和架构设计 ts 1 4 在线教育后台数据库设计
  • Maven第5篇:手把手教你搭建私服

    Maven第5篇 手把手教你搭建私服 环境 maven3 6 1 开发工具idea jdk1 8 本篇内容 私服介绍 windows中安装nexus私服 linux中安装nexus私服 nexus私服中各种仓库详解 配置本地Maven从ne