Maven私服

1 Maven私服简介

Maven 私服是一种特殊的Maven远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库)。

1.1 下载构件顺序

建立私服后,当局域网内的用户需要某个构件时,会按照如下顺序进行请求和下载:

  • 第1步:请求本地仓库,若本地仓库不存在所需构件,则跳转到第 2 步;
  • 第2步:请求 Maven 私服,将所需构件下载到本地仓库,若私服中不存在所需构件,则跳转到第 3 步;
  • 第3步:请求外部的远程仓库,将所需构件下载并缓存到 Maven 私服,若外部远程仓库不存在所需构件,则 Maven 直接报错。

此外,一些无法从外部仓库下载到的构件,也能从本地上传到私服供其他人使用。

1.2 私服的优势
  • 节省外网带宽
    消除对外部远程仓库的大量重复请求,降低外网带宽压力。
  • 下载速度更快
    Maven私服位于局域网内,从私服下载构建更快更稳定。
  • 便于部署第三方构件
    有些构件无法从任何一个远程仓库中获得(如:公司或组织内部的私有构件、Oracle的JDBC驱动等),建立私服之后,就可以将这些构件部署到私服中,供内部Maven项目使用。
  • 提高项目的稳定性,增强对项目的控制
    如果不建立私服,那么Maven项目的构件就高度依赖外部的远程仓库,若外部网络不稳定,则项目的构建过程也会变得不稳定。建立私服后,即使外部网络状况不佳甚至中断,只要私服中已经缓存了所需的构件,Maven也能够正常运行。私服软件(如:Nexus)提供了很多控制功能(如:权限管理、RELEASE/SNAPSHOT版本控制等),可以对仓库进行一些更加高级的控制。
  • 降低中央仓库得负荷压力
    由于私服会缓存中央仓库得构件,避免了很多对中央仓库的重复下载,降低了中央仓库的负荷。
1.3 常见的Maven私服产品
  • Apache的Archiva
  • JFrog的Artifactory
  • Sonatype的Nexus(当前最流行、使用最广泛)

2 Nexus下载安装

Nexus下载所需的安装包,并解压到按照路径下即可。

以管理员身份打开CMD,进入bin目录下,执行./nexus /run命令启动,启动成功如图所示:

访问 Nexus 首页,地址为http://localhost:8081/,8081为默认端口号。

2.1 Nexus登录

此处的用户名为admin,密码存储在nexus安装路径下admin.password文件中,如D:\DevProgramFiles\nexus-3.61.0-02-win64\sonatype-work\nexus3\admin.password文件中。

登录后的nexus设置:

设置新密码

设置是否匿名访问(禁用匿名访问)

完成配置:

2.2 Nexus中的仓库介绍
  • 仓库名称
仓库名称 说明
maven-central Nexus 对 Maven 中央仓库的代理
maven-public Nexus 默认创建,供开发人员下载使用的组仓库
maven-releases Nexus 默认创建,供开发人员部署自己 jar 包的宿主仓库 要求 releases 版本
maven-snapshots Nexus 默认创建,供开发人员部署自己 jar 包的宿主仓库 要求 snapshots 版本

初始状态下,这几个仓库都没有内容。

  • 仓库类型
仓库类型 说明
proxy 某个远程仓库的代理
group 存放:通过 Nexus 获取的第三方 jar 包
hosted 存放:本团队其他开发人员部署到 Nexus 的 jar 包

3 通过Nexus下载jar包

3.1 配置仓库地址
  • 配置mirror镜像地址为当前的nexus仓库地址
    如果配置了其他的仓库地址,替换为如下配置。
xml 复制代码
<mirror>
	<id>nexus-mine</id>
	<mirrorOf>central</mirrorOf>
	<name>Nexus mine</name>
	<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
3.2 设置访问用户和密码

由于不支持匿名访问,因此需要在settings.xml文件中的servers标签中配置访问的用户名和密码

xml 复制代码
<server>
  <id>nexus-mine</id>
  <username>admin</username>
  <password>123456</password>
</server>

注意: server 标签内的 id 标签值必须和 mirror 标签中的 id 值一样。

3.3 jar包的上传和下载

此时mvn clean compile项目,会发现下载jar包并上传到nexus:

console 复制代码
Downloading from nexus-mine: http://localhost:8081/repository/maven-public/org/codehaus/plexus/plexus-compiler-api/2.8.4/plexus-compiler-api-2.8.4.jar
Downloaded from nexus-mine: http://localhost:8081/repository/maven-public/commons-io/commons-io/2.5/commons-io-2.5.jar (209 kB at 11 kB/s)
Downloading from nexus-mine: http://localhost:8081/repository/maven-public/org/codehaus/plexus/plexus-compiler-manager/2.8.4/plexus-compiler-manager-2.8.4.jar
Downloaded from nexus-mine: http://localhost:8081/repository/maven-public/org/codehaus/plexus/plexus-compiler-manager/2.8.4/plexus-compiler-manager-2.8.4.jar (4.7 kB at 227 B/s)
Downloading from nexus-mine: http://localhost:8081/repository/maven-public/org/codehaus/plexus/plexus-compiler-javac/2.8.4/plexus-compiler-javac-2.8.4.jar
Downloaded from nexus-mine: http://localhost:8081/repository/maven-public/org/ow2/asm/asm/6.2/asm-6.2.jar (111 kB at 5.3 kB/s)
Downloaded from nexus-mine: http://localhost:8081/repository/maven-public/org/codehaus/plexus/plexus-java/0.9.10/plexus-java-0.9.10.jar (39 kB at 1.8 kB/s)
Downloaded from nexus-mine: http://localhost:8081/repository/maven-public/com/thoughtworks/qdox/qdox/2.0-M9/qdox-2.0-M9.jar (317 kB at 14 kB/s)
Downloaded from nexus-mine: http://localhost:8081/repository/maven-public/org/codehaus/plexus/plexus-compiler-api/2.8.4/plexus-compiler-api-2.8.4.jar (27 kB at 1.2 kB/s)
Downloaded from nexus-mine: http://localhost:8081/repository/maven-public/org/codehaus/plexus/plexus-compiler-javac/2.8.4/plexus-compiler-javac-2.8.4.jar (21 kB at 938 B/s)
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 3 source files to D:\DevWorkspace\IntelliJIDEAWS\giser-java\giser-java-common\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  05:16 min
[INFO] Finished at: 2023-12-23T20:45:41+08:00
[INFO] ------------------------------------------------------------------------

此时再次查看Nexus服务器,对应的仓库中就有了jar包了。如下:

3.4 更新中央仓库地址

上述下载实际上是通过Maven中央仓库下载,然后上传到nexus,再下载到本地的。为了提高下载速度,可以修改中央仓库地址为国内的镜像地址,如阿里云镜像地址。

将④处的地址改为阿里云镜像仓库地址:http://maven.aliyun.com/nexus/content/groups/public/

原始地址为:https://repo1.maven.org/maven2/

4 通过Nexus部署jar包

在Maven工程中配置如下信息:

xml 复制代码
<distributionManagement>
    <snapshotRepository>
        <id>nexus-mine</id>
        <name>Nexus Snapshot</name>
        <url>http://localhost:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

**注意:**这里 snapshotRepository 的 id 标签必须和 settings.xml 中指定的 mirror 标签的 id 属性一致。

执行部署命令mvn deploy即可。

console 复制代码
Uploading to nexus-mine: http://localhost:8081/repository/maven-snapshots/com/giser/giser-java-common/1.0-SNAPSHOT/giser-java-common-1.0-20231223.130426-1.pom
Uploaded to nexus-mine: http://localhost:8081/repository/maven-snapshots/com/giser/giser-java-common/1.0-SNAPSHOT/giser-java-common-1.0-20231223.130426-1.pom (1.7 kB at 4.5 kB/s)
Downloading from nexus-mine: http://localhost:8081/repository/maven-snapshots/com/giser/giser-java-common/maven-metadata.xml
Uploading to nexus-mine: http://localhost:8081/repository/maven-snapshots/com/giser/giser-java-common/1.0-SNAPSHOT/maven-metadata.xml
Uploaded to nexus-mine: http://localhost:8081/repository/maven-snapshots/com/giser/giser-java-common/1.0-SNAPSHOT/maven-metadata.xml (770 B at 1.1 kB/s)
Uploading to nexus-mine: http://localhost:8081/repository/maven-snapshots/com/giser/giser-java-common/maven-metadata.xml
Uploaded to nexus-mine: http://localhost:8081/repository/maven-snapshots/com/giser/giser-java-common/maven-metadata.xml (284 B at 361 B/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:53 min
[INFO] Finished at: 2023-12-23T21:04:29+08:00
[INFO] ------------------------------------------------------------------------

Process finished with exit code 0

此时再次查看Nexus服务器,对应的仓库中就有部署的jar包了。如下:

4 引用jar包

在工程中配置仓库地址,如下:

xml 复制代码
<repositories>
    <repository>
        <id>nexus-mine</id>
        <name>nexus-mine</name>
        <url>http://localhost:8081/repository/maven-snapshots/</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>
</repositories>

这样就可以通过坐标直接引用jar包了。

相关推荐
测开小菜鸟16 分钟前
使用python向钉钉群聊发送消息
java·python·钉钉
P.H. Infinity1 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天1 小时前
java的threadlocal为何内存泄漏
java
caridle1 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
^velpro^2 小时前
数据库连接池的创建
java·开发语言·数据库
苹果醋32 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
秋の花2 小时前
【JAVA基础】Java集合基础
java·开发语言·windows
小松学前端2 小时前
第六章 7.0 LinkList
java·开发语言·网络
Wx-bishekaifayuan2 小时前
django电商易购系统-计算机设计毕业源码61059
java·spring boot·spring·spring cloud·django·sqlite·guava
customer082 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源