Nexus 为 IDEA 提供 Jar 包私服介绍

发布时间 2023-04-01 20:02:12作者: 乔京飞

每个公司根据自身的需要,必然有自己研发的 jar 包,需要在项目之间共享使用。对于企业级项目来说,需要引用的 jar 包数量庞大,而且 jar 包也会不断更新,因此开发人员绝对不可能互相拷贝 jar 包来使用,这样就会造成项目管理和维护上的沉重负担。

使用 Nexus 作为私服就能够很好的解决上述问题,不但可以集中管理公司自己研发的所有 jar 包,也可以代理下载中央仓库的 jar 包。本篇博客使用上篇博客中搭建的 2 台虚拟机作为演示环境,介绍如何对 IDEA 进行配置来使用 Nexus 私服。


一、创建自己的私服仓库

Nexus 提供了 3 种类型的仓库:

  • 宿主仓库(hosted):主要存放公司自主研发的 jar 包,或者从第三方购买的具有版权的 jar 包
  • 代理仓库(proxy):代理连接远程官方的中央仓库,或者第三方的中央仓库(如阿里云的中央仓库)
  • 仓库组(group):主要作用是将代理仓库和/或宿主仓库编组,为项目提供一个统一的 jar 包下载地址

image

下面我们使用上篇博客搭建的虚拟机环境,在 Nexus 上创建自己的仓库:2 个 hosted 仓库,1 个 group 仓库。

在 Win10 上打开浏览器,访问 http://192.168.6.111:8081 并登录 Nexus 私服网站。

如下图所示,依次点击【齿轮】-->【Respositories】-->【Create repository】进入创建仓库的操作界面。

image

在创建仓库的界面下方列表,选择 maven2(hosted)进入下一个界面:

image

对于 java 项目来说,业界主要使用的是两种版本:Snapshot 和 Release ,因此采用上面的操作步骤,我们创建 2 个 hosted 仓库,这里分别命名为 Jobs-Snapshot 和 Jobs-Release 。

对于 group 仓库的创建来说,主要有两个不同的地方:

第一个不同是在创建仓库类型的列表中选择 maven2(group)

第二个不同是在创建界面中,version policy 选择 Mixed(混合仓库的意思,表示既包含 Snapshot 也包含 Release)

image

需要注意的是:我们自己创建的 group 仓库,在最下面的需要把 maven-central(中央仓库)以及我们自己创建的 2 个 hosted 仓库进行编组。

image

我们自己创建好的 3 个仓库的效果如下所示:

image

分别点击我们创建好的 3 个仓库,就能够看到 3 个仓库的地址:

Jobs-Group 的地址:http://192.168.6.111:8081/repository/Jobs-Group/

Jobs-Release 的地址:http://192.168.6.111:8081/repository/Jobs-Release/

Jobs-Snapshot 的地址:http://192.168.6.111:8081/repository/Jobs-Snapshot/


由于 maven-central 这个中央仓库的地址是国外的地址,访问速度会比较慢,因此我们需要替换成国内的阿里云的中央仓库地址。想要了解阿里云所有的仓库地址,可以访问这个网址:https://developer.aliyun.com/mvn/guide

阿里云的中央仓库地址为:https://maven.aliyun.com/repository/central

进入 maven-central 的界面,在 Remote Storage 下面的文本框中设置为阿里云的中央仓库地址,如下图所示:

image


二、本地 Maven 配置

IDEA 是通过本地的 Maven 与 Nexus 进行通信,向我们创建的 2 个 hosted 仓库上传 jar 包,以及从 group 仓库中下载 jar 包的。由于我懒得安装独立的 maven 了,因此就直接使用 IDEA 自带的 maven 插件,对其进行配置。

我的 IDEA 安装的路径是 C:\IDEA ,因此其自带的 maven 配置文件地址为:C:\IDEA\plugins\maven\lib\maven3\conf\settings.xml

对 maven 的 settings.xml 文件配置两个地方:

一、配置 maven 向 Nexus 上传 jar 包的 hosted 仓库,以及账号密码,如下所示:

<servers>
    <server>
      <!--hosted 仓库的名称-->
      <id>Jobs-Snapshot</id>
      <!--访问 Nexus 的账号-->
      <username>admin</username>
      <!--访问 Nexus 的密码-->
      <password>admin</password>
    </server>
    <server>
      <id>Jobs-Release</id>
      <username>admin</username>
      <password>admin</password>
    </server>
</servers>

二、配置 maven 从 Nexus 下载 jar 包的 group 地址,以及让 maven 通过 Nexus 进行所有 jar 包的下载

<mirrors>
    <mirror>
        <!--group 仓库的名称-->
        <id>Jobs-Group</id>
        <!--镜像名称,该配置可以删除-->
        <name>Nexus私服</name>
        <!--group 仓库的地址-->
        <url>http://192.168.6.111:8081/repository/Jobs-Group/</url>
        <!--此处配置为星号(*),表示 maven 下载所有 jar 包,都必须通过 Nexus 上面配置的 group 仓库地址-->
        <mirrorOf>*</mirrorOf>
    </mirror>
</mirrors>

三、IDEA 的 Pom 文件配置

我使用之前博客的一个 java 项目进行了简化改造,其项目结构如下所示:

image

打开 springcloud_nexus 的根 pom 文件,在其最下面配置 Snapshot 和 Release 上传 jar 包的仓库地址即可。完整的 pom 文件内容如下所示:

<?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.jobs</groupId>
    <artifactId>springcloud_nexus</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>eureka_app</module>
        <module>provider_app</module>
        <module>consumer_app</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <!--spring boot-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
    </parent>

    <!--Spring Cloud-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR12</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!--新增加的配置-->
    <distributionManagement>
        <!--配置 snapshot 版本的 jar 包上传的目标仓库和地址-->
        <snapshotRepository>
            <id>Jobs-Snapshot</id>
            <url>http://192.168.6.111:8081/repository/Jobs-Snapshot/</url>
        </snapshotRepository>
        <!--配置 release 版本的 jar 包上传的目标仓库和地址-->
        <repository>
            <id>Jobs-Release</id>
            <url>http://192.168.6.111:8081/repository/Jobs-Release/</url>
        </repository>
    </distributionManagement>
</project>

完成以上配置之后,就可以把当前项目的 Snapshot 版本和 Release 版本的 jar 包,通过 maven 的 deploy 命令上传到所配置的仓库了。

打开 springcloud_nexus 项目的所有项目的 pom 文件,可以发现当前配置的 version 都是 1.0-SNAPSHOT(这里的字符都是大写,实际上字符是不区分大小写的)。然后双击 deploy 命令,等待最终的 build success 即可。

image

然后进入 Nexus 的浏览页面中,点击查看 Jobs-Snapshot 仓库中的内容。

image

就可以看到 springcloud_nexus 项目的 Snapshot 版本的 jar 包,上传到了 Jobs-Snapshot 仓库中了。

image

同理,可以 springcloud_nexus 项目下的 4 个 pom 文件中的 version 修改为 1.0-RELEASE,在双击 deploy 命令,build success 之后,就可以在 Job-Release 仓库下看到所发布的 jar 包了。

image

选择具体的 jar 包后,可以通过右侧的 Delete component 按钮进行删除。

image

有关 jar 包下载,这里就不再演示了,只要你在项目的 pom 文件中增加了新的 jar 包坐标,刷新一下 maven 即可从 Nexus 下载 jar 包,如果 Jobs-Group 仓库中没有的话,第一次会连接远程的中央仓库去下载,后续就可以直接从 Nexus 下载了。


OK,有关 Nexus 为 IDEA 提供私服代理的简单介绍到此为止,下面是 Demo 的源代码地址:

https://files.cnblogs.com/files/blogs/699532/springcloud_nexus.zip