SonatypeNexus

私服

简介

Maven私服(Maven Repository Manager)是一种用于管理和缓存Maven构建依赖的工具。它充当了本地和中央远程仓库之间的中间层,为开发团队提供了更高效、可靠的构建过程。私服可以帮助团队在内部维护和共享构建依赖,从而加快项目构建速度,并减轻对公共中央仓库的依赖,提高项目构建的可靠性。

image-20230721165702245

优点

  1. 加快构建速度:私服允许团队在内部缓存项目所需的依赖,减少了对外部中央仓库的访问,从而提高了构建速度。

  2. 离线构建:私服允许团队在没有网络连接时继续构建项目,因为所需的依赖已经被缓存在私服中。

  3. 版本控制:私服可以确保项目使用特定版本的依赖,从而提高项目的稳定性。

  4. 安全性:私服允许团队在内部管理构建依赖,减少了对外部不可信仓库的依赖,提高了构建的安全性。

私服仓库分类

Maven私服仓库分类,主要是指根据存储内容和访问权限将私服仓库划分为不同的类型。一般来说,私服仓库可以分为以下几类:

Proxy Repository(代理仓库)

代理仓库是私服与公共中央仓库之间的中间层。它可以缓存从公共中央仓库下载的依赖,从而在项目构建过程中加快依赖下载速度,并降低对中央仓库的网络依赖。代理仓库会自动向上游中央仓库发起请求,并将下载的依赖保存在本地,以便后续项目构建时直接从私服仓库获取依赖。

代码示例:创建一个代理仓库的配置,在项目的pom.xml文件中添加如下代码:

<project>
    <!-- 其他配置 -->

    <repositories>
        <!-- 定义代理仓库 -->
        <repository>
            <id>maven-central-proxy</id>
            <url>http://localhost:8081/nexus/repository/maven-central/</url>
            <!-- 设置为true表示该仓库是代理仓库 -->
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

    <!-- 其他配置 -->
</project>

在上述配置中,maven-central-proxy是代理仓库的ID,http://localhost:8081/nexus/repository/maven-central/是代理仓库的URL地址。

Hosted Repository(托管仓库)

托管仓库是私服中用于存储内部开发项目的依赖的仓库。它允许开发团队发布自己的Maven项目,以便其他项目可以访问和使用这些依赖。在托管仓库中,开发者可以将自己的项目构件发布到私服,并且其他项目可以通过私服获取这些构件。

代码示例:在Sonatype Nexus控制台中创建一个托管仓库。

  • 在Sonatype Nexus控制台,点击左侧导航栏的"Settings",然后选择"Repositories"。
  • 在右侧的"Repositories"页面,点击"Create Repository"。
  • 选择"Maven (Hosted)"作为仓库类型,然后按照向导设置仓库的属性。

Group Repository(组合仓库)

组合仓库是私服中的虚拟仓库,它可以将多个代理仓库和托管仓库组合在一起,并将它们呈现为单一的仓库。组合仓库允许开发者在项目中只配置一个仓库,但实际上可以从多个实际仓库中获取依赖。

代码示例:在Sonatype Nexus控制台中创建一个组合仓库。

  • 在Sonatype Nexus控制台,点击左侧导航栏的"Settings",然后选择"Repositories"。
  • 在右侧的"Repositories"页面,点击"Create Repository"。
  • 选择"Maven (Group)"作为仓库类型,然后按照向导设置组合仓库的属性,并选择包含的实际仓库。

Snapshot Repository(快照仓库)

快照仓库用于存储项目的快照版本,即开发过程中的不稳定版本。快照版本通常用于频繁发布和测试最新的功能和改进,而不用每次都发布稳定的版本。快照仓库允许开发者发布和获取这些不稳定版本的依赖。

代码示例:在Sonatype Nexus控制台中创建一个快照仓库。

  • 在Sonatype Nexus控制台,点击左侧导航栏的"Settings",然后选择"Repositories"。
  • 在右侧的"Repositories"页面,点击"Create Repository"。
  • 选择"Maven (Hosted)"作为仓库类型,并勾选"Support Snapshots"选项,然后按照向导设置仓库的属性。

搭建Maven私服

搭建Maven私服有多种选择,其中最常用的是Sonatype Nexus和JFrog Artifactory。在本示例中,我们将使用Sonatype Nexus搭建Maven私服。

image-20230721170020850

步骤一:下载Sonatype Nexus

首先,你需要下载Sonatype Nexus,可以从官方网站下载:https://www.sonatype.com/nexus-repository-oss。

直达链接:https://help.sonatype.com/repomanager3/product-information/download

步骤二:安装Sonatype Nexus

解压下载的压缩包,并进入解压后的目录。然后,执行以下命令启动Sonatype Nexus:

linux : ./bin/nexus run
windows: nexus.exe /run nexus

步骤三:访问Sonatype Nexus控制台

在浏览器中访问 http://localhost:8081,进入Sonatype Nexus控制台。初始访问时,你需要设置管理员密码。然后开启匿名访问。

步骤四:配置Maven私服

登录Sonatype Nexus控制台后,点击左侧导航栏的"Settings",然后选择"Maven Repositories"。

在"Maven Repositories"页面,你可以创建和管理私服中的Maven仓库。默认情况下,Sonatype Nexus已经预先配置了几个仓库。

  • maven-central:中央远程仓库,用于缓存从中央仓库下载的依赖。
  • maven-public:用于发布Maven项目的公共仓库。
  • maven-snapshots:用于发布快照版本的仓库。

你可以根据需要添加新的仓库,例如,创建一个私有仓库用于存储内部项目的依赖。

步骤五:配置Maven项目使用私服

为了让Maven项目使用你搭建的私服,你需要在项目的pom.xml文件中添加私服的配置。

<project>
    <!-- 其他配置 -->
    
    <repositories>
        <repository>
            <id>your-repo-id</id>
            <url>http://your-nexus-url/repository/your-repo-id/</url>
        </repository>
    </repositories>
    
    <!-- 其他配置 -->
</project>

上述配置中,your-repo-id是你在Sonatype Nexus控制台中创建的仓库ID,http://your-nexus-url/repository/your-repo-id/是你私服的URL地址。

当Maven项目构建时,Maven会从私服中下载依赖,从而加快构建速度并减轻对中央仓库的依赖。

示例代码

下面是一个示例的pom.xml文件,展示了如何配置Maven私服:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-maven-project</artifactId>
    <version>1.0.0</version>

    <!-- 配置私服仓库 -->
    <repositories>
        <repository>
            <id>my-private-repo</id>
            <url>http://localhost:8081/nexus/repository/my-private-repo/</url>
        </repository>
    </repositories>

    <!-- 依赖配置 -->
    <dependencies>
        <!-- 这里可以使用私服的依赖 -->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>my-private-library</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>

    <!-- 其他配置 -->
</project>

上述示例中,my-private-repo是在Sonatype Nexus中创建的私有仓库,用于存储my-private-library这个依赖。

Nexus基础配置

当涉及到Nexus的相关配置时,我们将主要关注以下方面:

  1. 修改基础配置信息:包括修改Nexus管理员密码、更改默认端口、配置SSL证书等。

  2. 修改服务器运行配置信息:包括调整JVM内存参数、配置运行时用户、更改数据存储位置等。

  3. 创建和管理Maven仓库:包括创建代理仓库、托管仓库、组合仓库和快照仓库,以及配置仓库的属性。

  4. 权限管理和用户配置:包括创建用户、分配角色和权限,以控制用户对Nexus的访问和操作。

  5. 仓库访问策略配置:包括配置代理仓库的缓存策略、设置快照仓库的过期策略等。

修改基础配置信息

修改Nexus管理员密码

默认情况下,Nexus的管理员账号是admin,密码是admin123。为了增强安全性,我们应该在首次登录后尽快修改管理员密码。

代码实现:在Nexus控制台中修改管理员密码。

  • 首次登录Nexus控制台,在页面右上角点击"Sign In"。
  • 登录后,点击页面右上角的用户图标,选择"Change Password"。
  • 输入当前密码和新密码,然后点击"Save"保存修改。

更改默认端口

Nexus默认使用8081端口进行访问。如果8081端口已经被占用或者你想要更改端口号,可以通过修改配置文件来实现。

代码实现:修改nexus.properties配置文件。

  • 打开Nexus安装目录下的nexus.properties文件。
  • 找到并修改以下行,将端口号修改为你想要的端口号:
application-port=8081
  • 保存文件,并重新启动Nexus使配置生效。

配置SSL证书

如果你想要在Nexus中启用HTTPS,你需要配置SSL证书。

代码实现:在Nexus控制台中配置SSL证书。

  • 在Nexus控制台,点击左侧导航栏的"Settings",然后选择"General"。
  • 在"General"页面中,找到"SSL"部分,配置SSL证书相关信息。

修改服务器运行配置信息

调整JVM内存参数

根据Nexus的使用情况,可能需要调整JVM内存参数,以确保Nexus有足够的内存进行运行。

代码实现:修改nexus.vmoptions文件。

  • 打开Nexus安装目录下的bin/nexus.vmoptions文件。
  • 修改以下行来调整JVM内存参数:
-Xms2g  # 设置JVM最小内存为2GB
-Xmx4g  # 设置JVM最大内存为4GB
  • 保存文件,并重新启动Nexus使配置生效。

配置运行时用户

为了安全性考虑,你可以将Nexus的运行时用户从默认的nexus用户更改为其他用户。

代码实现:修改nexus.rc文件(适用于Linux系统)。

  • 打开Nexus安装目录下的bin/nexus.rc文件。
  • 修改以下行来配置运行时用户:
run_as_user="your_user"
  • your_user替换为你想要使用的运行时用户。
  • 保存文件,并重新启动Nexus使配置生效。

更改数据存储位置

默认情况下,Nexus的数据存储在Nexus安装目录下的sonatype-work文件夹。你可以将数据存储位置更改为其他路径,以便更好地管理和备份数据。

代码实现:修改nexus.properties配置文件。

  • 打开Nexus安装目录下的nexus.properties文件。
  • 找到并修改以下行,将数据存储位置修改为你想要的路径:
nexus-work=${bundleBasedir}/../sonatype-work/nexus
  • 保存文件,并重新启动Nexus使配置生效。

  • 当涉及Nexus的配置时,我们已经讨论了修改基础配置信息和服务器运行配置信息。现在,我们将继续讨论创建和管理Maven仓库,以及权限管理和用户配置。

当涉及Nexus的配置时,我们已经讨论了修改基础配置信息和服务器运行配置信息。现在,我们将继续讨论创建和管理Maven仓库,以及权限管理和用户配置。

创建和管理Maven仓库

创建代理仓库

代理仓库充当Nexus与公共中央仓库之间的中间层,可以缓存从公共中央仓库下载的依赖,从而提高构建速度。

代码实现:在Nexus控制台中创建代理仓库。

  1. 登录Nexus控制台,点击左侧导航栏的"Settings",然后选择"Repositories"。

  2. 在右侧的"Repositories"页面,点击"Create Repository"。

  3. 选择"Maven (Proxy)"作为仓库类型。

  4. 按照向导设置代理仓库的属性,包括仓库名称、仓库ID、远程仓库URL等。

  5. 点击"Create Repository"创建代理仓库。

创建托管仓库

托管仓库用于存储内部开发项目的依赖,允许开发团队发布自己的Maven项目,并供其他项目访问和使用这些依赖。

代码实现:在Nexus控制台中创建托管仓库。

  1. 登录Nexus控制台,点击左侧导航栏的"Settings",然后选择"Repositories"。

  2. 在右侧的"Repositories"页面,点击"Create Repository"。

  3. 选择"Maven (Hosted)"作为仓库类型。

  4. 按照向导设置托管仓库的属性,包括仓库名称、仓库ID等。

  5. 点击"Create Repository"创建托管仓库。

创建组合仓库

组合仓库是私服中的虚拟仓库,可以将多个实际仓库组合在一起,呈现为单一的仓库。

代码实现:在Nexus控制台中创建组合仓库。

  1. 登录Nexus控制台,点击左侧导航栏的"Settings",然后选择"Repositories"。

  2. 在右侧的"Repositories"页面,点击"Create Repository"。

  3. 选择"Maven (Group)"作为仓库类型。

  4. 按照向导设置组合仓库的属性,包括仓库名称、仓库ID等。

  5. 在"Member Repositories"部分,选择要包含在组合仓库中的实际仓库。

  6. 点击"Create Repository"创建组合仓库。

创建快照仓库

快照仓库用于存储项目的快照版本,即开发过程中的不稳定版本。

代码实现:在Nexus控制台中创建快照仓库。

  1. 登录Nexus控制台,点击左侧导航栏的"Settings",然后选择"Repositories"。

  2. 在右侧的"Repositories"页面,点击"Create Repository"。

  3. 选择"Maven (Hosted)"作为仓库类型。

  4. 在向导中勾选"Support Snapshots"选项,表示这是一个快照仓库。

  5. 按照向导设置快照仓库的属性,包括仓库名称、仓库ID等。

  6. 点击"Create Repository"创建快照仓库。

权限管理和用户配置

权限管理和用户配置允许你控制用户对Nexus的访问和操作。你可以创建用户、分配角色和权限,来限制或开放不同用户的权限。

代码实现:在Nexus控制台中进行权限管理和用户配置。

  1. 登录Nexus控制台,点击左侧导航栏的"Security",然后选择"Users"。

  2. 在右侧的"Users"页面,点击"Create User"创建新用户。

  3. 输入用户名和密码,并选择相应的角色。角色决定了用户在Nexus中的权限。

  4. 点击"Create User"创建用户。

  5. 在"Roles"页面,你可以定义自定义角色并分配相应的权限。

  6. 点击"Create Role"创建新角色。

  7. 为角色指定权限,例如访问特定仓库、发布构件等。

  8. 将角色分配给相应的用户,以控制其权限。

仓库访问策略配置

仓库访问策略配置是指在Nexus中配置不同类型仓库的访问策略,用于控制用户对仓库的访问和使用权限。通过合理设置仓库访问策略,可以确保仓库的安全性和稳定性,同时满足项目的需求。

在Nexus中,主要有以下几种仓库访问策略:

  1. 代理仓库访问策略
  2. 托管仓库访问策略
  3. 组合仓库访问策略
  4. 快照仓库访问策略

代理仓库访问策略

代理仓库是用于代理公共中央仓库的中间仓库,通过代理仓库,Nexus可以缓存从公共中央仓库下载的依赖,从而提高构建速度。在配置代理仓库的访问策略时,我们可以设置缓存策略和连接超时等参数。

代码实现:在Nexus控制台中配置代理仓库的访问策略。

  1. 登录Nexus控制台,点击左侧导航栏的"Settings",然后选择"Repositories"。

  2. 在右侧的"Repositories"页面,找到已创建的代理仓库,点击仓库名称进入详情页。

  3. 在仓库详情页中,点击"Configuration"选项卡。

  4. 在"Repository Policy"部分,可以设置缓存策略,如"Always"表示始终缓存远程仓库中的构件,"Never"表示不缓存构件,"Per-Request"表示根据请求缓存构件。

  5. 在"Connection"部分,可以设置连接超时等参数,确保与远程仓库的通信稳定。

  6. 完成设置后,点击"Save"保存配置。

托管仓库访问策略

托管仓库是用于存储内部开发项目的依赖,可以发布和管理自己的Maven项目。在配置托管仓库的访问策略时,我们可以设置发布策略和删除策略。

代码实现:在Nexus控制台中配置托管仓库的访问策略。

  1. 登录Nexus控制台,点击左侧导航栏的"Settings",然后选择"Repositories"。

  2. 在右侧的"Repositories"页面,找到已创建的托管仓库,点击仓库名称进入详情页。

  3. 在仓库详情页中,点击"Configuration"选项卡。

  4. 在"Repository Policy"部分,可以设置发布策略,如"Allow Redeploy"表示允许覆盖已发布的构件,"Read Only"表示只读模式不允许发布。

  5. 在"Delete Policy"部分,可以设置删除策略,如"Allow Delete"表示允许删除构件,"Read Only"表示只读模式不允许删除。

  6. 完成设置后,点击"Save"保存配置。

组合仓库访问策略

组合仓库是私服中的虚拟仓库,可以将多个实际仓库组合在一起,呈现为单一的仓库。在配置组合仓库的访问策略时,我们主要关注成员仓库的顺序,即用户在组合仓库中查找构件时会按照顺序依次查找成员仓库。

代码实现:在Nexus控制台中配置组合仓库的访问策略。

  1. 登录Nexus控制台,点击左侧导航栏的"Settings",然后选择"Repositories"。

  2. 在右侧的"Repositories"页面,找到已创建的组合仓库,点击仓库名称进入详情页。

  3. 在仓库详情页中,点击"Configuration"选项卡。

  4. 在"Member Repositories"部分,可以拖动成员仓库来调整它们的顺序。成员仓库的顺序将影响用户查找构件时的查找顺序。

  5. 完成设置后,点击"Save"保存配置。

快照仓库访问策略

快照仓库用于存储项目的快照版本,即开发过程中的不稳定版本。在配置快照仓库的访问策略时,我们可以设置过期策略和清理策略。

代码实现:在Nexus控制台中配置快照仓库的访问策略。

  1. 登录Nexus控制台,点击左侧导航栏的"Settings",然后选择"Repositories"。

  2. 在右侧的"Repositories"页面,找到已创建的快照仓库,点击仓库名称进入详情页。

  3. 在仓库详情页中,点击"Configuration"选项卡。

  4. 在"Repository Policy"部分,可以设置过期策略,如"Keep Forever"表示不过期,"Remove When Released"表示当构件发布后删除快照构件。

  5. 在"Cleanup"部分,可以设置清理策略,如"Remove If Released"表示当构件发布后删除快照构件,"Remove When More Than N Days Old"表示删除指定天数前的快照构件。

  6. 完成设置后,点击"Save"保存配置。

资源上传与下载

概述

image-20230721173504148

创建用户与认证

在Nexus中,认证信息通常是通过用户凭据(用户名和密码)来进行身份验证。认证信息的设置涉及到创建用户账号,并为用户赋予相应的权限。接下来,我将详细讲解在Nexus中设置认证信息的步骤,并结合代码实现辅助理解。

设置认证信息步骤

  1. 登录Nexus控制台:使用管理员账号登录Nexus的Web界面。默认情况下,Nexus的Web控制台地址为:http://your-nexus-server:8081,请根据实际情况替换your-nexus-server为你的Nexus服务器地址。

  2. 创建用户账号:在Nexus控制台中,点击左侧导航栏的"Security"(安全)选项,然后选择"Users"(用户)。点击"Create User"(创建用户)按钮,填写用户的用户名、密码和邮箱等信息,然后保存。

  3. 分配角色:在Nexus中,角色用于管理用户的权限。点击左侧导航栏的"Security"(安全)选项,然后选择"Roles"(角色)。选择或创建一个适当的角色,然后将创建的用户添加到该角色中。

  4. 授权访问:在Nexus控制台中,点击左侧导航栏的"Repository"(仓库)选项,然后选择"Repositories"(仓库)。找到需要进行身份验证的仓库,点击仓库名称进入详情页。在仓库详情页中,点击"Configuration"(配置)选项卡。在"Permissions"(权限)部分,授予相应的角色对该仓库的访问权限。确保赋予用户足够的权限,以便进行上传和下载构件的操作。

  5. 保存配置:完成上述设置后,点击"Save"(保存)按钮,将认证信息和权限配置保存到Nexus中。

代码实现

假设我们已经在Nexus中创建了一个用户账号,用户名为"myuser",密码为"mypassword"。并且已经为该用户分配了一个名为"upload-download"的角色,该角色具有上传和下载构件的权限。

下面是使用Maven构建工具时,在pom.xml中配置认证信息的示例代码:

<project>
    <!-- ... -->
    <distributionManagement>
        <repository>
            <id>nexus-releases</id>
            <url>https://example.com/nexus/repository/releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <url>https://example.com/nexus/repository/snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

    <properties>
        <!-- 设置认证信息 -->
        <nexus.username>myuser</nexus.username>
        <nexus.password>mypassword</nexus.password>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <username>${nexus.username}</username>
                    <password>${nexus.password}</password>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <username>${nexus.username}</username>
                    <password>${nexus.password}</password>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <!-- ... -->
</project>

在上述示例中,我们在pom.xml中设置了Maven的认证信息,使用nexus.usernamenexus.password来指定Nexus的用户名和密码。这样,在执行Maven构建命令时,Maven会使用这些认证信息进行身份验证,以便上传和下载构件。

小贴士

  1. 实际应用中,为了安全性考虑,我们通常不会直接在pom.xml中明文存储密码,而是使用Maven的加密功能或其他安全方式来管理密码。

资源上传(上传构件)

资源上传指将自己的构件发布到私服,以便其他项目可以从私服中下载这些构件。上传构件的过程主要涉及以下步骤:

  1. 身份验证:用户首先需要在Nexus上创建账号,并通过身份验证,以获取上传权限。

  2. 配置Maven项目:在Maven项目的pom.xml中配置私服的URL和认证信息,以便Maven构建工具能够将构件上传到私服。

  3. 执行构建:通过Maven构建命令将项目构建为构件,并将构件上传到私服。

Maven项目配置

在Maven项目的pom.xml文件中添加私服的配置,包括私服的URL和认证信息。

<project>
    <!-- ... -->
    <distributionManagement>
        <repository>
            <id>nexus-releases</id>
            <url>https://example.com/nexus/repository/releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <url>https://example.com/nexus/repository/snapshots/</url>
        </snapshotRepository>
    </distributionManagement>
    <!-- ... -->
</project>

在上述配置中,nexus-releasesnexus-snapshots是私服的ID,https://example.com/nexus/repository/releases/https://example.com/nexus/repository/snapshots/是私服的URL。

上传构件

使用Maven构建命令上传构件到私服。

# 上传正式版构件
mvn deploy

# 上传快照版构件
mvn deploy -Dmaven.deploy.snapshot=true

执行以上命令后,Maven会将构件上传到私服中相应的仓库,正式版构件上传到nexus-releases,快照版构件上传到nexus-snapshots

资源下载(下载构件)

资源下载指从私服中获取所需的构件,以便在项目中使用。下载构件的过程主要涉及以下步骤:

  1. 身份验证:用户需要在Nexus上创建账号,并通过身份验证,以获取下载权限。

  2. 配置Maven项目:在Maven项目的pom.xml中配置私服的URL和认证信息,以便Maven构建工具能够从私服中下载构件。

  3. 执行构建:通过Maven构建命令将项目构建,Maven会从私服中下载所需的构件。

Maven项目配置

在Maven项目的pom.xml文件中添加私服的配置,包括私服的URL和认证信息,与资源上传时的配置类似。

<project>
    <!-- ... -->
    <repositories>
        <repository>
            <id>nexus-releases</id>
            <url>https://example.com/nexus/repository/releases/</url>
        </repository>
        <repository>
            <id>nexus-snapshots</id>
            <url>https://example.com/nexus/repository/snapshots/</url>
        </repository>
    </repositories>
    <!-- ... -->
</project>

在上述配置中,我们定义了两个仓库:nexus-releases用于下载正式版构件,nexus-snapshots用于下载快照版构件。请根据实际情况进行替换。

下载构件

当我们执行Maven构建命令时,Maven会自动从私服中下载所需的构件。

mvn clean install

在上述命令中,Maven会从私服中下载依赖的构件,并将项目构建为可执行文件。

小贴士

  1. 在进行资源下载前,确保正确配置了私服的URL和认证信息,这样才能顺利下载私服中的构件。
赞赏