Maven 搭建私服

一、Maven 私服简介

1.1 私服简介

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

当然也并不是说私服只能建立在局域网,也有很多公司会直接把私服部署到公网,具体还是得看公司业务的性质是否是保密的等等,因为局域网的话只能在公司用,部署到公网的话员工在家里也可以办公使用。

建立了 Maven私服后,当局域网内的用户需要某个构件时,会按照如下顺序进行请求和下载。此外,一些无法从外部仓库下载到的构件,也能从本地上传到私服供其他人使用。

1、 请求本地仓库,若本地仓库不存在所需构件,则跳转到第 2 步。

2、 请求 Maven 私服,将所需构件下载到本地仓库,若私服中不存在所需构件,则跳转到第 3

3、 请求外部的远程仓库,将所需构件下载并缓存到 Maven 私服,若外部远程仓库不存在所需构件,则 Maven直接报错。

1.2 私服优势

**1、**节省外网带宽,消除对外部远程仓库的大量重复请求(会消耗很大量的带宽),降低外网带宽压力。

2、 下载速度更快, Maven私服位于局域网内,从私服下载构建更快更稳定。

3、 便于部署第三方构件,有些构件无法从任何一个远程仓库中获得(如:公司或组织内部的私有构件、OracleJDBC 驱动等),建立私服之后,就可以将这些构件部署到私服中,供内部 Maven项目使用。

4、 提高项目的稳定性,增强对项目的控制。如果不建立私服,那么 Maven 项目的构件就高度依赖外部的远程仓库,若外部网络不稳定,则项目的构建过程也会变得不稳定。建立私服后,即使外部网络状况不佳甚至中断,只要私服中已经缓存了所需的构件,Maven 也能够正常运行。私服软件(如:Nexus )提供了很多控制功能(如:权限管理、RELEASE/SNAPSHOT 版本控制等),可以对仓库进行一些更加高级的控制。

**5、**降低中央仓库得负荷压力,由于私服会缓存中央仓库得构件,避免了很多对中央仓库的重复下载,降低了中央仓库的负荷。

1.3 私服产品

1、ApacheArchiva

2、JFrogArtifactory

3、SonatypeNexus(当前最流行、使用最广泛)

二、Nexus下载安装

2.1 下载

下载地址在这,选择适合自己系统的版本,如下图:

2.2 安装

下载完成后解压,进入到 bin 目录后,以管理员身份打开 cmd ,执行**./nexus /run**命令启动,如下图,第一次启动有点慢,需要一些时间。

当出现以下的图标时就证明启动成功了,如下:

在浏览器输入:http://localhost:8081/ ,用来访问首页,如下,

2.3 初始设置

1、 首先点击右上角的 Sign in ,如下:

2、 输入用户名和密码,用户名默认为 admin,密码在画框的文件里面存储,拿出来输入进去,如下:

3、 点击 next ,输入自己的密码,继续点击 Next

4、 选择禁止用户匿名登录,如下图,继续点击 Next

5、 点击 Finish安装成功

2.4 Nexus 上的各种仓库

Nexus 会默认帮我们创建 7 个仓库,其中上面以 maven 开头的 4 个是我们使用的,下面的那三个是和 aspdonet相关的,我们用不上。

接下来我们来介绍下这四个仓库,先从类型上介绍,如下

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

接下来从仓库的功能来介绍下这四个仓库,如下:

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

初始状态下,这几个仓库都是没有内容的,如下图:

2.5 通过 Nexus 下载 jar 包

1、 修改本地 maven 的核心配置文件settings.xml,设置新的本地仓库地址

XML 复制代码
  <localRepository>E:\repo-new</localRepository>

2、 把我们原来配置阿里云仓库地址的 mirror标签改成下面这样

XML 复制代码
<mirror>
	<id>nexus-mine</id>
	<mirrorOf>central</mirrorOf>
	<name>Nexus mine</name>
	<url>http://localhost:8081/repository/maven-public/</url>
</mirror>

这里面的 url标签是这么来的,如下图:

把上图中看到的地址复制出来即可。如果我们在前面允许了匿名访问,到这里就够了。但如果我们禁用了匿名访问,那么接下来我们还要继续配置 settings.xml,如下

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

这里需要注意,server 标签内的 id 标签值必须和 mirror 标签中的id值一样。

4、 打开 idea ,看看 maven的配置是否自动切换到新的库了,如下图,可以看到,实体库的路径自动切换过来了,证明我们修改的没有问题。

5、 随便找一个 maven 工程,执行 clean命令,如下图

可以看到,我们所依赖的 jar 包是从 nexus-mine 即我们指定的私服来下载的。整个流程是从中央仓库下载到私服,然后从私服下载到本地仓库,此时打开我们的私服,如下图,可以看到里面有一些依赖的插件了。

若下载速度太慢,可以设置私服中中央仓库的地址为阿里云仓库地址

bash 复制代码
# 阿里云镜像地址
http://maven.aliyun.com/nexus/content/groups/public/

6、 此时我们再执行一次 package操作,如下图,可以看到,我们的私服又下载了好多的依赖。

2.6 将 jar 包部署到 Nexus

只需要在 maven 工程的 pom.xml 中配置如下的标签,这里的 snapshotRepositoryid 标签必须和 settings.xml 中指定的 mirror 标签的 id属性一致。

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

idea 中执行部署的命令 deploy,如下图:

然后就可以在私服上面看见我们的上传的 jar包了,如下图:

2.7 引用别人部署的 jar 包

只需要在 maven 工程的 pom.xml中配置如下的标签

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

执行 package操作,如下图所示

相关推荐
hweiyu008 小时前
Maven 私库
java·maven
goxingman14 小时前
关于使用idea打包的时候报错,Maven提示乱码java: �Ҳ�������
java·maven·intellij-idea
一碗谦谦粉1 天前
Maven 依赖调解的两大原则
java·maven
清木青青1 天前
maven中的scope理解,你学会了吗?
maven
苦学编程的谢2 天前
Maven
java·maven·intellij-idea
考虑考虑2 天前
Maven 依赖范围(Scope)
java·后端·maven
程序员张32 天前
Maven编译和打包插件
java·spring boot·maven
代码的余温2 天前
5种高效解决Maven依赖冲突的方法
java·maven
paishishaba2 天前
Maven
java·maven
代码的余温3 天前
Maven引入第三方JAR包实战指南
java·maven·jar