Nexus 是 Sonatype 公司发布的一款仓库(Repository)管理软件,常用来搭建 Maven 私服,所以也有人将 Nexus 称为 “Maven仓库管理器”。
目前 Nexus 分为 Nexus 2.x 和 Nexus 3.x 两个大版本,它们是并行的关系。
Nexus 2.x:https://help.sonatype.com/repomanager2/download
Nexus 3.x:https://help.sonatype.com/repomanager3/download
本文将在 Windows 10 和 Ubuntu 18.04 下安装配置 Nexus 2.15.0。
1. Windows 下安装配置
1) 下载
下载 https://download.sonatype.com/nexus/oss/nexus-2.15.0-04-bundle.zip,解压到手动创建的目录 C:\Applications\Java\nexus-2.15\ 。
解压后,C:\Applications\Java\nexus-2.15\ 目录有两个文件夹
C:\Applications\Java\nexus-2.15\nexus-2.15.0-04
C:\Applications\Java\nexus-2.15\sonatype-work
其中:
nexus-2.15.0-04:此目录包含 Nexus 运行所需要的文件以及所有必需的其他组件,如启动脚本、依赖 jar 包等。
sonatype-work:该目录包含所有由 Nexus 存储和管理的仓库,组件和其他数据。
2) 启动 nexus 服务
(1) console 运行方式
打开 cmd 命令行窗口,进入 C:\Applications\Java\nexus-2.15\nexus-2.15.0-04\bin 目录,执行如下命令:
C:\Applications\Java\nexus-2.15\nexus-2.15.0-04\bin>nexus console
注:console 运行方式,关闭 cmd 命令行窗口服务就停止,如果需要在后台运行就需注册服务方式运行。
(2) 注册服务运行方式
用文件浏览器打开 C:\Applications\Java\nexus-2.15\nexus-2.15.0-04\bin\jsw\windows-x86-64 目录,显示如下文件:
console-nexus.bat:启动 Nexus 并在 DOS 命令行中展示启动过程。
install-nexus.bat:将 Nexus 安装为 Windows 服务,开机自动启动。
start-nexus.bat:启动 Nexus。
stops-nexus.bat:停止 Nexus。
uninstall-nexus.bat:与 install-nexus.bat 相对应,负责卸载 Nexus 服务。
以管理员身份运行 install-nexus.bat(只需运行一次,除非运行了 uninstall-nexus.bat 后,再注册时需要运行一次)注册 nexus 服务,完成后电脑启动时,nexus 服务自动启动。
以管理员身份运行 start-nexus.bat 启动服务。
双击运行 console-nexus.bat 也可以 console 方式运行,不用注册 nexus 服务,等效于运行命令 nexus console。
3) 访问 nexus
用浏览器访问 http://localhost:8081/nexus,显示 Nexus 界面。
点击 Nexus 首页右上角的 “Sign in” 按钮,在登录页面输入用户名和密码(默认用户名为 admin,默认密码 admin123),点击 “Sign in” 按钮登录。
2. Ubuntu 下安装配置
1) 下载
$ wget https://download.sonatype.com/nexus/oss/nexus-2.15.0-04-bundle.tar.gz
$ mv ./nexus-2.15.0-04-bundle.tar.gz ~/apps/nexus-2.15 # 这里使用 /home/xxx/apps/nexus-2.15 目录, xxx 是用户根目录
$ cd ~/apps/nexus-2.15
$ tar -zvxf nexus-2.15.0-04-bundle.tar.gz
解压后,~/apps/nexus-2.15 目录有两个文件夹
~/apps/nexus-2.15/nexus-2.15.0-04
~/apps/nexus-2.15/sonatype-work
2) 启动 nexus 服务
$ cd ~/apps/nexus-2.15/nexus-2.15.0-04/bin
$ ./nexus start
Starting Nexus OSS…
Started Nexus OSS.
$ ./nexus status
Nexus OSS is running (2030).
$ jps
2032 JswLauncher
2141 Jps
nexus 服务已经运行,2032 就是它的进程,停止 nexus 服务,使用 ./nexus stop 命令。
如果需要程序运行在前台,关闭控制台就关闭了程序,可以使用 ./nexus console 命令。
3) 访问 nexus
用浏览器访问 http://localhost:8081/nexus,显示 Nexus 界面。
点击 Nexus 首页右上角的 “Sign in” 按钮,在登录页面输入用户名和密码( 默认用户名为 admin,默认密码 admin123 ),点击 “Sign in” 按钮登录。
3. Nexus 仓库属性
Nexus 2.x 默认创建的 Nexus 内置仓库:
(1) Maven Central:该仓库用来代理 Maven 中央仓库,其策略为 Release,只会下载和缓存中央仓库中的发布版本的构件;
(2) Releases:策略为 Release 的宿主仓库,用来部署公司或组织内部的发布版本构件;
(3) Snapshots:策略为 Snapshot 的宿主仓库,用来部署公司或组织内部的快照版本构件;
(4) 3rd party:策略为 Release 的宿主仓库,用来部署第三方发布版本构件,这些构件一般无法从任何远程仓库中获得;
(5) Public Repositories:该仓库组将上述所有存储策略为 Release 的仓库聚合并通过统一的地址提供服务;
Nexus 2.x 仓库按照类型(Type)区分,主要分为以下 4 个类型:
(1) 代理仓库(proxy):用来代理远程公共仓库,如 Maven 中央仓库、JBoss 远程仓库;
(2) 宿主仓库(hosted):又称 Nexus 本地仓库,该仓库通常用来部署本地项目所产生的构件;
(3) 仓库组(group):用来聚合代理仓库和宿主仓库,为这些仓库提供统一的服务地址,以便 Maven 可以更加方便地获得这些仓库中的构件;
(4) 虚拟仓库(virtual):用于适配 Maven 1;
仓库组、代理仓库和宿主仓库的用途和区别:
(1) Maven 可以直接从宿主仓库中下载构件;
(2) Maven 也可以从代理仓库中下载构件,代理仓库会从远程仓库下载并缓存构件;
(3) Maven 还可以从仓库组中下载构件,仓库组会从其包含的宿主仓库和代理仓库中获取构件;
4. Nexus 创建仓库
1) 创建 Nexus 宿主仓库
需要创建两个宿主仓库,分别用来存储从本地上传到 Nexus 的 Snapshot 和 Release 版本的构件,操作步骤如下。
点击 Repositories 进入 Repositories 页面,点击仓库列表上方的 Add … 按钮,在下拉菜单中选择 Hosted Repository 按钮,显示 “New Hosted Repository” 页面。
Repository ID:longsite_snapshot_hosted
Repository Name: longsite_snapshot_hosted
Provider: Maven2
Repository policy: Snapshot
其它参数默认,点击下方 Save 按钮,生成仓库。参考以上步骤,再创建一个 longsite_release_hosted 仓库 。
宿主仓库配置如下:
配置 | 描述 |
Repository ID | 仓库 ID。 |
Repository Name | 仓库名称。 |
Repository Type | 仓库的类型,如 hosted、proxy 等等。 |
Provider | 用来确定仓库的格式,一般默认选择 Maven2。 |
Repository Policy | 仓库的策略。 |
Default Local Storage Location | 仓库默认存储目录。 |
Override Local Storage Location | 自定义仓库存储目录。 |
Deployment Policy | 仓库的部署策略。 |
Allow File Browsing | 用来控制是否允许浏览仓库内容,一般选择 true。 |
Include in Search | 用来控制该仓库是否创建索引并提供搜索功能。 |
Publish URL | 用来控制是否通过 URL 提供服务。 |
Not Found Cache TTL | 缓存某构件不存在信息的时间,默认取值为 1440,表示若某一个构件在仓库中没有找到,在 1440 分钟内再次接收到该构件的请求,则直接返回不存在信息,不会再次查找。 |
2) 创建 Nexus 代理仓库
下面创建一个代理仓库,用来下载和缓存中央仓库的构件。
点击仓库列表上方的 Add … 按钮,在下拉菜单中选择 Proxy Repository 按钮,显示 “New Proxy Repository” 页面。
Repository ID:longsite_central_proxy
Repository Name: longsite_central_proxy
Provider: Maven2
Repository policy: Release
Remote Storage Location:https://repo1.maven.org/maven2/
其它参数默认,点击下方 Save 按钮,生成仓库。
代理仓库配置如下表。
配置 | 描述 |
Remote Storage Location | 远程仓库或中央仓库的地址,它是 Nexus 代理仓库最重要得配置,必须输入有效值,通常取值为 https://repo1.maven.org/maven2/。 |
Download Remote Indexes | 是否下载远程仓库的索引。 |
Auto Blocking Enabled | 是否启用自动阻止,即当 Nexus 无法连接中央仓库或远程仓库时,是否一直等待。取值为 true 表示不再等待,直接通知客户端无法连接,并返回。 |
File Content Validation | 是否启用文件内容校验。 |
Checksum Policy | 配置校验和出错时的策略,用户可以选择忽略、警告、记录警告信息或拒绝下载等多种策略。 |
Artifact Max Age | 构件缓存的最长时间,对于发布版本仓库来说,默认值为 -1,表示构件缓存后,就一直保存着,不再重新下载。对于快照版本仓库来说,默认值为 1440 分钟,表示每隔一天重新缓存一次代理的构件。 |
Metadata Max Age | 仓库元数据缓存的最长时间。 |
Item Max Age | 项目缓存的最长时间。 |
3) 创建 Nexus 仓库组
下面我们将创建一个仓库组,并将刚刚创建的 3 个仓库都聚合起来。
点击仓库列表上方的 Add … 按钮,在下拉菜单中选择 Repository Group,显示 “New Repository Group” 页面。
Group ID: longsite_repository_group
Group Name: longsite_repository_group
Provider: Maven2
Avaliable Repositories:longsite_snapshot_hosted, longsite_release_hosted, longsite_central_proxy
其它参数默认,点击下方 Save 按钮,生成仓库组 longsite_repository_group,它聚合了 longsite_snapshot_hosted, longsite_release_hosted, longsite_central_proxy 仓库。
5. Nexus 索引与构件搜索
1) 索引
Nexus 能够遍历仓库的所有内容,搜集它们的坐标,校验和以及所包含的 Java 类等信息,然后以索引( nexus-indexer) 的形式保存起来。Nexus 索引保存在 Nexus 安装目录下 \sonatype-work\nexus\indexer 目录中,该目录下每个子目录都代表 Nexus 中的一个仓库,用来存放各个仓库的索引。
大多数的远程公共仓库(例如,中央仓库)都维护了一个这样的索引,因此本地的 Nexus 在下载到这个索引后,就能在此基础上为用户提供构件搜索和浏览等服务。
需要注意,并不是所有的公共仓库都提供了索引 ,对于那些没有提供索引的仓库来说,我们是无法对其进行搜索的。
2) 下载索引
Nexus 索引下载功能默认是关闭的,如果想在 Nexus 中搜索远程仓库中的构件,就需要先开启索引下载功能。
以 longsite_central_proxy 代理仓库(代理 Maven 中央仓库)为例,Download Remote Indexes 可以控制它的索引下载功能,true 表示开启索引下载,false 表示关闭索引下载。
开启索引下载功能后,点击左侧导航栏中 Administration > Scheduled Tasks 链接,查看调度任务列表。若 Nexus 正在下载索引,就能看到其任务状态为 Running。在索引下载完毕后,该任务就会消失。
由于 Maven 中央仓库的内容较多,其索引文件比较大,因此 Nexus 下载该文件所需的时间较长,需要耐心等待。
索引下载完成后,点击仓库列表中的 longsite_central_proxy 代理仓库,然后在列表下方选择 Browse Index 选项卡,可以看到该仓库内容的树形结构。
3) 构件搜索
Nexus 通过维护索引,为用户提供了关键字搜索、类名搜索、坐标搜索等多种搜索功能,通过这些功能,页面中能够清晰地展示出结果构件的坐标以及所属仓库。用户可以直接下载相应的构件,也可以直接复制构件的 XML 依赖声明,到项目中使用。
在 Nexus 界面左边导航栏中有一个搜索框,在搜索框内输入所需构件的关键字,单击搜索按钮就能快速得到搜索结果。
除了关键字搜索外,Nexus 还提供了一些高级搜索功能,例如类名搜索、GAV 搜索以及 “校验和” 搜索。我们可以通过点击搜索页左上角的下拉菜单,选择以下高级搜索功能:
类名搜索(Keyword Search): 搜索包含某个 Java 类的构件;
GAV 搜索(GAV Search): 通过设置 Group、Artifact、版本等信息进行搜索;
校验和搜索(Checksum Search): 通过使用“校验和”搜索构件;
这些搜索功能的使用都十分的简单,可以根据自己的需求选择合适的搜索功能。
6. Nexus 离线更新中央仓库索引
Nexus 可以远程下载和缓存中央仓库索引,但是对于国内用户来说,Nexus 远程更新索引使用的站点位于国外且部分索引文件较大,经常会出现下载速度缓慢或索引文件不完整等情况。下面我们将介绍一种更加快捷可靠的索引更新方式:离线更新中央仓库索引。
离线更新中央仓库索引,顾名思义,就是直接将索引文件下载,然后拷贝至 Nexus 工作目录中,以达到离线更新索引的目的。
1) 文件下载
访问 https://repo.maven.apache.org/maven2/.index/,下载 nexus-maven-repository-index.gz 和 nexus-maven-repository-index.properties 两个文件(一般位于列表的末尾)。
访问 https://mvnrepository.com/artifact/org.apache.maven.indexer/indexer-cli/5.1.1,查看 indexer-cli 信息。
访问 https://repo1.maven.org/maven2/org/apache/maven/indexer/indexer-cli/5.1.1/,下载 indexer-cli-5.1.1.jar。
2) 解压和更新索引
以 Windows 下的 nexus 2.15 为例,把三个文件 nexus-maven-repository-index.gz、nexus-maven-repository-index.properties 和 indexer-cli-5.1.1.jar 下载到 C:\Applications\Java\nexus-2.15\tmp\ 目录下。
打开 cmd 命令行窗口,进入 C:\Applications\Java\nexus-2.15\tmp\ 目录,执行如下命令:
C:\Applications\Java\nexus-2.15\tmp>java -jar .\indexer-cli-5.1.1.jar -u .\nexus-maven-repository-index.gz -d ..\sonatype-work\nexus\indexer\central-ctx
解压完成后,重启 Nexus,访问 http://localhost:8081/nexus,在仓库列表选中 Central 代理仓库,对比 Browse Index 和 Browse Remote 中的索引,若两者完全一致,则表示离线索引更新成功。
7. 部署构件到 Nexus 宿主仓库
宿主仓库(Hosted)的主要作用就是存储公司或组织内部的构件,以及一些无法从公共仓库获取的第三方构件(JDBC 驱动),供用户下载使用。用户可以通过配置 Maven 将构件自动部署到 Nexus 宿主仓库,也可以在 Nexus 界面手动上传构件。
1) 使用 Maven 部署构件到 Nexus
日常开发中,快照版本构件可以直接部署到 Nexus 中策略为 Snapshot 的宿主仓库中,而最终发布的版本则应该部署到 Nexus 中策略为 Release 的宿主仓库中。
使用 Maven 将构件部署到 Nexus 宿主仓库中主要分为 3 步:
(1) 配置项目的 POM 文件;
(2) 在 setting.xml 中配置认证信息;
(3) 使用 mvn 命令部署构件;
下面我们在 “Maven基础知识(1)- Maven 简介、Maven 安装配置、创建 Quickstart 项目” 里 MavenDemo01 项目基础上,来演示如何使用 Maven 部署构件到 Nexus 宿主仓库。
(1) 配置项目的 POM 文件
修改 POM 文件,添加如下配置。
1 <project> 2 ... 3 4 <distributionManagement> 5 <repository> 6 <id>longsite_release_hosted</id> 7 <url>http://localhost:8081/nexus/content/repositories/longsite_release_hosted/</url> 8 </repository> 9 <snapshotRepository>10 <id>longsite_snapshot_hosted</id>11 <url>http://localhost:8081/nexus/content/repositories/longsite_snapshot_hosted/</url>12 </snapshotRepository>13 </distributionManagement>14 </project>
以上配置说明如下:
distributionManagement 元素:负责将指定的构件部署到 Nexus 指定的仓库中;
repository 元素:distributionManagement 的子元素,用于定义部署 Release 版本的构件被部署的仓库。它有 2 子元素:id 和 url ,其中 id 为 Nexus 仓库的唯一标识,url 为 Nexus 宿主仓库的 url;
snapshotRepository 元素:distributionManagement 的子元素,用于定义部署 Snapshot 版本的构件被部署的仓库。它也有 2 子元素:id 和 url ,且与 repository 中含义一致;
(2) 在 Maven 的 setting.xml 中配置认证信息
最初版本的 Nexus 没有为宿主仓库提供任何的安全措施。如果宿主仓库开启了部署功能,任何人可以连接并部署构件至这个仓库,这显然不安全。因此,现在的 Nexus 中增加了权限认证,Nexus 对于匿名用户是只读的,若想部署构件到 Nexus 中,则需要在 setting.xml 中配置如下认证信息。
1 <settings> 2 ... 3 4 <servers> 5 <server> 6 <id>longsite_release_hosted</id> 7 <username>admin</username> 8 <password>admin123</password> 9 </server>10 <server>11 <id>longsite_snapshot_hosted</id>12 <username>admin</username>13 <password>admin123</password>14 </server>15 </servers>16 </settings>
注:以上配置中,server 元素中的 id 必须和 pom.xml 中 distributionManagement 元素对应仓库的 id 保持一致。Maven 在部署构件时,会先根据 id 查找用户名称和密码进行认证和登录,然后将构件部署到对应得宿主仓库。
(3) 使用 mvn 命令部署构件
打开 cmd 命令行窗口,进入 D:\Workshop\maven\MavenDemo01 目录,执行如下命令:
D:\Workshop\maven\MavenDemo01>mvn clean deploy
在 Nexus 界面的仓库列表选中 longsite_snapshot_hosted 宿主仓库,在下方的 Browse Index 选项卡中,可以看到 MavenDemo01 构件已经被部署到该仓库中。
2) 手动上传构件
有些 Jar 文件(如 Oracle 的 JDBC 驱动)由于许可证等原因,无法存放在公开仓库中。此外,还有一些小型的开源项目,它们没有将自己的构件分发到公共仓库中,也没有维护自己的仓库,因此这些构件是无法从公共仓库中获得的。若 Maven 项目中需要这类构件,就需要将构件下载到本地,然后手动上传到 Nexus 私服。
下面我们把 “Maven基础知识(6)- Maven 依赖传递、POM 继承、Maven 聚合” 里 MavenDemo04 项目的子模块 CoreLib 和 DataLib,手动上传到 longsite_release_hosted 仓库。
GAV Definition 中提供了两种定义构件坐标的方式:
若该构件通过 Maven 构建产生的,则可以选择 From POM,Nexus 会自动从 POM 中获取构件的坐标。
若该构件来自第三方,则只能选择 GAV Parameters,手动定义构件的坐标。
以上 2 种方式操作时会略有不同,下面我们分别对它们进行介绍。
(1) From POM
若该构件是通过 Maven 构建产生的,那么可以在 GAV Definition 下拉列表中,选择 From POM,然后指定该构件所属项目的 pom.xml,Nexus 会自动从 pom.xml 中获取构件的坐标。
这里把 CoreLib
点击 Select Artifact(s) to Upload … 按钮,选择要上传的构件 CoreLib-1.0.jar,点击 Add Artifact 按钮。
最后点击页面最下方的 Upload Artifact(s) 按钮,将构件上传到仓库中。
在仓库列表中选中 longsite_release_hosted 仓库,在下方的 Browse Index 选项卡中,可以看到构件已经被部署到该仓库中。
(2) GAV Paramters
若构件不是通过 Maven 构建的,而是来自第三方(例如 Oracle 的 JDBC 驱动),则只能在 GAV Definition 下拉列表中,选择 GAV Parameters 手动定义构件的坐标。
定义好坐标后,点击 Select Artifact(s) to Upload… 按钮选择要上传的构件 DataLib-1.0.jar ,然后点击 Add Artifact 按钮将其加入上传列表中。最后点击页面最下方的 Upload Artifact(s) 按钮,将构件上传到仓库中。
在仓库列表中选中 longsite_release_hosted 仓库,在下方的 Browse Index 选项卡中,可以看到构件已经被部署到该仓库中。
8. 从 Nexus 下载构件
1) 配置项目的 pom.xml 实现下载
上文 MavenDemo01-1.0-SNAPSHOT.jar 被部署到了 longsite_snapshot_hosted 宿主仓库,DataLib-1.0.jar 和 CoreLib-1.0.jar 被部署到了 longsite_release_hosted 仓库。
如果 Maven 项目依赖这些 *.jar,这里可以把仓库组 longsite_repository_group 配置为私服,因为仓库组 longsite_repository_group 聚合了 longsite_snapshot_hosted 和 longsite_release_hosted 仓库,配置如下。
1 <repositories> 2 <!-- 声明一个 Nexus 私服上的仓库 --> 3 <repository> 4 <id>nexus</id> 5 <name>nexus</name> 6 <url>http://localhost:8081/nexus/content/repositories/longsite_repository_group/</url> 7 <releases> 8 <enabled>true</enabled> 9 </releases>10 <snapshots>11 <enabled>true</enabled>12 </snapshots>13 </repository>14 </repositories>15 <pluginRepositories>16 <!-- 声明一个 Nexus 私服上的插件仓库 -->17 <pluginRepository>18 <id>nexus</id>19 <name>nexus</name>20 21 <url>http://localhost:8081/nexus/content/repositories/longsite_repository_group/</url>22 <releases>23 <enabled>true</enabled>24 </releases>25 <snapshots>26 <enabled>true</enabled>27 </snapshots>28 </pluginRepository>29 </pluginRepositories>
其中,在 repositories 元素下可以使用 repository 子元素声明一个或多个远程仓库,一个 repository 元素对应一个远程仓库。
repository 各个子元素含义如下表。
元素 | 描述 |
id | 仓库的唯一标识。需要注意的是,Maven 中央仓库的 id 为 central,如果其他的仓库也使用该 id,就会覆盖中央仓库的配置。 |
name | 仓库的名称。 |
url | 仓库的地址,该地址一般都是基于 HTTP 协议的,通过浏览器即可访问该地址,浏览仓库中的构件。 |
releases/snapshots | 用来控制 Maven 对于发布和快照版本构件的下载。它们都有一个 enabled 子元素,enabled 的取值为 true,表示开启发布版或快照版的下载支持,否则表示关闭下载支持。 |
在 pluginRepositories 元素下可以使用 pluginRepository 子元素声明一个或多个远程插件仓库(包括私服上的仓库),一个 pluginRepository 元素对应一个远程插件仓库。pluginRepository 下所有子元素的含义均与与 repository 的子元素相同,不再赘述。
2) 配置 Maven 的 setting.xml 实现下载
在 pom.xml 中配置 Nexus ,只对当前项目有效,在实际应用中,往往希望能够通过一次配置就能让本机中的所有 Maven 项目都使用 Nexus。
Maven 不支持 setting.xml 直接配置 repositories 和 pluginRepositories,但 Maven 提供了 profile 机制,能够让我们将仓库配置放在 profile 中。
1 <profiles> 2 <profile> 3 <id>nexus</id> 4 <repositories> 5 <!-- 声明一个 Nexus 私服上的仓库 --> 6 <repository> 7 <id>nexus</id> 8 <name>nexus</name> 9 <url>http://localhost:8081/nexus/content/repositories/longsite_repository_group/</url>10 <releases>11 <enabled>true</enabled>12 </releases>13 <snapshots>14 <enabled>true</enabled>15 </snapshots>16 </repository>17 </repositories>18 <pluginRepositories>19 <!-- 声明一个 Nexus 私服上的插件仓库 -->20 <pluginRepository>21 <id>nexus</id>22 <name>nexus</name>23 <url>http://localhost:8081/nexus/content/repositories/longsite_repository_group/</url>24 <releases>25 <enabled>true</enabled>26 </releases>27 <snapshots>28 <enabled>true</enabled>29 </snapshots>30 </pluginRepository>31 </pluginRepositories>32 </profile>33 </profiles>34 <activeProfiles>35 <activeProfile>nexus</activeProfile>36 </activeProfiles>
以上配置中使用了一个 id 为 nexus 的 profile,这个 profile 中包含了与仓库相关的配置,同时配置中还使用了一个 activeProfiles 元素将 id 为 nexus 的 profile 激活。当本机有 Maven 项目构建时,profile 中的仓库配置就会应用到项目中。
Nexus 私服通常会与镜像(mirror)结合使用,使 Nexus 成为所有远程仓库的私服,这样不仅可以从 Nexus 中获取所有所需构件,还能将配置集中到 Nexus 私服中,简化 Maven 本身的配置。
可以创建一个匹配任何仓库的镜像,镜像的地址为 Nexus 中仓库的地址,这样 Maven 对于任何构件的下载请求都会被拦截跳转到 Nexus 私服中,其具体配置如下。
1 <mirrors> 2 <mirror> 3 <id>nexus</id> 4 <name>nexus name</name> 5 <mirrorOf>*</mirrorOf> 6 <url>http://localhost:8081/nexus/content/groups/longsite_repository_group/</url> 7 </mirror> 8 </mirrors> 9 <profiles>10 <profile>11 <id>nexus</id>12 <repositories>13 <repository>14 <id>central</id>15 <url>http://localhost:8081/nexus/content/repositories/longsite_central_proxy/</url>16 <releases>17 <enabled>true</enabled>18 </releases>19 <snapshots>20 <enabled>true</enabled>21 </snapshots>22 </repository>23 </repositories>24 <pluginRepositories>25 <pluginRepository>26 <id>central</id>27 <url>http://localhost:8081/nexus/content/repositories/longsite_central_proxy/</url>28 <releases>29 <enabled>true</enabled>30 </releases>31 <snapshots>32 <enabled>true</enabled>33 </snapshots>34 </pluginRepository>35 </pluginRepositories>36 </profile>37 </profiles>38 <activeProfiles>39 <activeProfile>nexus</activeProfile>40 </activeProfiles>
仓库和插件仓库的配置中,它们的 id 取值都是 central,即它们的设置覆盖了 Maven 中央仓库,但此时这里的 URL 已经无法起到任何作用,因为镜像的匹配规则是 *,所有的请求都已经被拦截,跳转到 Nexus 私服的地址。
转自:https://www.cnblogs.com/tkuang/p/16378061.html