Maven 私服搭建

在本节中,我们来介绍一下如何使用 Nexus 来搭建我们自己的 Maven 私服。在之前的章节中,我们已经介绍过关于 Maven 仓库的分类了,就像下图张展示的那样子,今天,我们就重点的来讲一下关于私服这部分内容。
图片描述

1. Nexus 简介与安装

1.1 Nexus 简介

Nexus 的创始人是 Tamas Cservenak。在大约 2005 年的时候,Tamas 开始开发了一个 Proximity 系统,开发这个系统的原因是当时的电信公司提供的 ADSL 网络的传输速度过慢。Proximity 系统的目的也很明确,代理和缓存中央仓库中的构件,在 Maven 需要下载构件的时候,不需要经过糟糕的 ADSL 网络。后来,到了 2007 年的时候,Sonatype 团队邀请了 Tamas 创建了 Nexus 项目。

我们可以发现这又是一段类似 git 的产生的历史。大神们总是用这种方式,来改变着我们的历史。

1.2 Nexus 安装

接下来,我们来安装 Nexus 。首先,我们可以去 Sonatype 的官网上下载对应的 Nexus 版本。不过这里还是要吐槽一下这个地址的访问速度非常慢。这里,我们使用的是nexus-2.11.2-03-bundle.tar.gz版本。

  1. 首先,我们将安装包上传到服务器的对应目录中;

  2. 我们将安装包进行解压,执行命令tar -xvf nexus-2.11.2-03-bundle.tar.gz,解压后,对 nexus-2.11.2-03 目录进行重命名 mv nexus-2.11.2-03 nexus

  3. 编辑环境变量,vi /etc/profile,在文件的最后,根据自己服务器的情况,添加如下的配置;

  4. 进入到 bin 目录中,cd /usr/local/src/nexus/bin

  5. 在 bin 目录中,有 Nexus 的可执行文件,我们来执行 nohup ./nexus start &,来启动 Nexus,启动成功后,在浏览器中,输入http://ip:port/nexus可以浏览私服的网址;

至此,我们就安装好了 Nexus。

2. Nexus 配置与使用

2.1 Nexus 配置

接下来,我们来介绍如何配置 Nexus,来让其帮我们代理 Maven 的中央仓库。

  1. 首先,我们登陆 Nexus ,默认的密码是 admin/admin123,登陆成功后,我们可以看到左侧出现更多的功能;

  2. 如下图操作,我们来添加代理仓库;

  3. 在下方的配置页面,如下图进行操作;

  4. 创建好代理仓库之后,还需要配置一下 Public Repositories;

  5. 在配置好 Public Repositories 之后,我们更新一下该仓库的索引;

  6. 更新索引可能会需要一段时间,等到更新好之后,我们可以 Nexus 中搜索想要的构件,这时候说明 Nexus 的索引已经更新完成;

2.2 Nexus 使用

在配置好 Nexus 之后,我们要在项目中使用私服要如何使用呢?答案是,和使用其他的仓库没有太大区别。接下来,我们来具体介绍一下如何在项目中使用。

  1. 打开 Maven 的 setting.xml 文件,将其中的 mirrors 节点和 profiles 节点改为如下配置;

    <mirrors>
        <mirror>
            <id>mic-maven</id>
            <mirrorOf>*</mirrorOf>
            <name>mic maven</name>
            <url>http://ip:port/nexus/content/groups/public/</url>
        </mirror>
    </mirrors>
    <profiles>
        <profile>
            <id>maven profile</id>
            <activation>
                <jdk>1.8</jdk>
                <activeByDefault>true</activeByDefault>
            </activation>
            <repositories>
                <repository>
                    <id>chenyao-central</id>
                    <name>chenyao maven</name>
                    <url>http://ip:port/nexus/content/groups/public/</url>
                    <releases>
                    	<enabled>true</enabled>
                    </releases>
                    <snapshots>
                    	<enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>chenyao-central</id>
                    <name>chenyao maven</name>
                    <url>http://ip:port/nexus/content/groups/public/</url>
                    <releases>
                    	<enabled>true</enabled>
                    </releases>
                    <snapshots>
                    	<enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>
    <activeProfiles>
    	<activeProfile>maven profile</activeProfile>
    </activeProfiles>
    
  2. 在 setting.xml 文件中配置好 Nexus 之后,我们可以在项目中引入一个 jar 包来试一下,如果能够成功的将构件下载到本地,就说明我们的配置是正确的。

介于我们在团队内部使用的时候,还需要将项目的构建到 Nexus 中,所以,我们还需要进行单独的配置。

  1. 首先,我们在项目的 pom.xml 文件中,添加 distributionManagement 节点,用于控制分发管理;

    <distributionManagement>
        <repository>
            <id>mic-release</id>
            <name>mic maven</name>
            <url>http://ip:port/nexus/content/repositories/releases/</url>
        </repository>
        <snapshotRepository>
            <id>mic-snapshot</id>
            <name>mic maven</name>
            <url>http://ip:port/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>
    </distributionManagement>
    
  2. 由于 Nexus 需要登陆才能使用,所以需要在 setting.xml 文件中配置服务器的登陆信息;

    <servers>
    	<server>
            <id>mic-release</id>
            <username>admin</username>
            <password>admin123</password>
        </server>
        <server>
            <id>mic-snapshot</id>
            <username>admin</username>
            <password>admin123</password>
        </server>
    </servers>
    
  3. 配置完成后,我们在 mall-order目录下执行mvn clean deploy

  4. 执行完之后,我们去 Nexus 中根据坐标可以查到这个构件。

至此,我们已经能够让 Nexus 来代理中央仓库,并且将我们自己的项目构建到私服中去,来提供给其他的项目中使用。

3. 小结

在本节中,我们首先介绍了什么是 Nexus ,然后介绍了 Nexus 在服务器中的安装与配置方式,最后,我们将私服配置到我们的项目中去,让其供我们的项目使用。

4. FAQ

4.1 版本选择

本文中,我们选择的是 Nexus 的 2.x 版本,之所以这样做是因为,3.x 版本建议 CPU 核心数为 4 核,但是,我的服务器只是一个双核的,所以,被迫选择了 2.x 版本,3.x 版本和 2.x 版本理念上没有太多区别,只是具体配置操作可能会有差异。

4.2 RUN_AS_USER

Nexus 是不建议使用 root 用户来启动的。这里我们有两个选择,一个是单独创建一个用户,来提供 Nexus 使用(建议);另一种就是像本节中的配置,在环境变量中增加 RUN_AS_USER 配置,来强制使用 root 用户启动。