每个公司根据自身的需要,必然有自己研发的 jar 包,需要在项目之间共享使用。对于企业级项目来说,需要引用的 jar 包数量庞大,而且 jar 包也会不断更新,因此开发人员绝对不可能互相拷贝 jar 包来使用,这样就会造成项目管理和维护上的沉重负担。
使用 Nexus 作为私服就能够很好的解决上述问题,不但可以集中管理公司自己研发的所有 jar 包,也可以代理下载中央仓库的 jar 包。本篇博客使用上篇博客中搭建的 2 台虚拟机作为演示环境,介绍如何对 IDEA 进行配置来使用 Nexus 私服。
一、创建自己的私服仓库
Nexus 提供了 3 种类型的仓库:
- 宿主仓库(hosted):主要存放公司自主研发的 jar 包,或者从第三方购买的具有版权的 jar 包
- 代理仓库(proxy):代理连接远程官方的中央仓库,或者第三方的中央仓库(如阿里云的中央仓库)
- 仓库组(group):主要作用是将代理仓库和/或宿主仓库编组,为项目提供一个统一的 jar 包下载地址
下面我们使用上篇博客搭建的虚拟机环境,在 Nexus 上创建自己的仓库:2 个 hosted 仓库,1 个 group 仓库。
在 Win10 上打开浏览器,访问 http://192.168.6.111:8081 并登录 Nexus 私服网站。
如下图所示,依次点击【齿轮】-->【Respositories】-->【Create repository】进入创建仓库的操作界面。
在创建仓库的界面下方列表,选择 maven2(hosted)进入下一个界面:
对于 java 项目来说,业界主要使用的是两种版本:Snapshot 和 Release ,因此采用上面的操作步骤,我们创建 2 个 hosted 仓库,这里分别命名为 Jobs-Snapshot 和 Jobs-Release 。
对于 group 仓库的创建来说,主要有两个不同的地方:
第一个不同是在创建仓库类型的列表中选择 maven2(group)
第二个不同是在创建界面中,version policy 选择 Mixed(混合仓库的意思,表示既包含 Snapshot 也包含 Release)
需要注意的是:我们自己创建的 group 仓库,在最下面的需要把 maven-central(中央仓库)以及我们自己创建的 2 个 hosted 仓库进行编组。
我们自己创建好的 3 个仓库的效果如下所示:
分别点击我们创建好的 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 下面的文本框中设置为阿里云的中央仓库地址,如下图所示:
二、本地 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 项目进行了简化改造,其项目结构如下所示:
打开 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 文件(一共 4 个 pom 文件),可以发现当前 version 配置节的值都是 1.0-SNAPSHOT(字符是不区分大小写的)。然后双击 deploy 命令,等待最终的 build success 即可。
然后进入 Nexus 的浏览页面中,点击查看 Jobs-Snapshot 仓库中的内容。
就可以看到 springcloud_nexus 项目的 Snapshot 版本的 jar 包,上传到了 Jobs-Snapshot 仓库中了。
同理,可以 springcloud_nexus 项目下所有的 pom 文件(一共 4 个 pom 文件),将其 version 配置节都修改为 1.0-RELEASE,在双击 deploy 命令,build success 之后,就可以在 Job-Release 仓库下看到所发布的 jar 包了。
选择具体的 jar 包后,可以通过右侧的 Delete component 按钮进行删除。
有关 jar 包下载,这里就不再演示了,只要你在项目的 pom 文件中增加了新的 jar 包坐标,刷新一下 maven 即可从 Nexus 下载 jar 包,如果 Jobs-Group 仓库中没有的话,第一次会连接远程的中央仓库去下载,后续就可以直接从 Nexus 下载了。
OK,有关 Nexus 为 IDEA 提供私服代理的简单介绍到此为止,下面是 Demo 的源代码地址:
https://files.cnblogs.com/files/blogs/699532/springcloud_nexus.zip