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