当前位置: 首页 > news >正文

使用 Docker 安装 Maven 私服 Nexus3

在现代软件开发中,私有仓库是企业管理和分发内部依赖的重要工具,能够提高开发效率、加强依赖管理并确保构建的稳定性。Nexus Repository Manager 作为市场上常见的私服解决方案,不仅支持 Maven,还支持 npm、PyPI 等多种格式,为团队提供了统一的制品管理平台。

本文将介绍如何使用 Docker 快速部署 Maven 私服 Nexus3,帮助开发者搭建高效的依赖管理和分发环境,同时减少环境配置的复杂性和维护成本。通过 Docker 部署,您可以轻松实现版本化控制、灵活配置以及跨平台的便捷使用,是中小型团队和企业的理想选择。


文章目录

      • 1、背景知识
      • 2、环境搭建
        • 2.1、步骤一:下载 Nexus3 镜像
        • 2.2、步骤二:查看 Nexus3 镜像
        • 2.3、步骤三:创建 Nexus3 挂载文件夹
        • 2.4、步骤四:启动 Nexus3 容器
        • 2.5、步骤五:查看 Nexus3 容器启动状态
    • image-20241023102250642
      • 3、环境配置
        • 3.1、步骤六:打开 Nexus3 页面
        • 3.2、步骤七:登陆 Nexus3 用户
        • 3.3、步骤八:配置阿里云代理仓库
        • 3.4、步骤九:配置仓库组
        • 3.5、步骤十:创建用户
      • 4、配置本地 Maven 仓库
        • 4.1、步骤十一:复制 settings 文件
        • 4.2、步骤十二:配置 servers 节点
        • 4.3、步骤十三:配置 mirrors 节点
        • 4.4、步骤十四:配置profiles节点
      • 5、配置项目 pom.xml 文件


1、背景知识

在研发的过程中,很多企业都会针对自身业务特点来定制研发一些工具类库,但是这些工具类库又不会对外公开,那如何在组织内部共享这些类库呢?一种很好的方式就是在公司内部搭建一套 Maven 私服仓库。

搭建 Maven 私服仓库可以提高项目构建和部署的效率、稳定性和安全性,同时方便管理内部开发的组件和私有库,比较适用于企业内部或者特定场景下的需求。

2、环境搭建

2.1、步骤一:下载 Nexus3 镜像

在服务器命令行输入如下命令,下载 Nexus3 镜像(视网络情况,可能需要耐心等待一会儿):

$ docker pull sonatype/nexus3
2.2、步骤二:查看 Nexus3 镜像

在服务器命令行输入如下命令,查看下载的 Nexus3 镜像。

$ docker images

可以看到,已经成功下载 Nexus3 镜像

image-20241023102213341

2.3、步骤三:创建 Nexus3 挂载文件夹

在服务器命令行输入如下命令,创建 Nexus 的挂载文件夹:

$ mkdir /usr/local/nexus-data && chown -R 200 /usr/local/nexus-data
2.4、步骤四:启动 Nexus3 容器

在服务器命令行输入如下命令,启动 Nexus3 容器:

$ docker run -d -p 8081:8081 --name nexus -v /usr/local/nexus-data:/nexus-data --restart=always sonatype/nexus3

可以看到,在上述启动命令中,我们将 Nexus3 容器的 /nexus-data 目录映射到了宿主机的 /usr/local/nexus-data 目录。此时 Nexus3 容器运行过程中,在 /nexus-data 目录产生的文件和日志都会在宿主机的 /usr/local/nexus-data 目录中查看到。

Ps:Nexus3 默认启动需要至少 2G 内存,所以一些环境下为了避免占用过多内,可以采用下面参数限制其内存:

$ docker run -d -e "INSTALL4J_ADD_VM_PARAMS=-Xms128m -Xmx512m -XX:MaxDirectMemorySize=512m -Djava.util.prefs.userRoot=/nexus-data/javaprefs" -p 8081:8081 --name nexus -v /usr/local/nexus-data:/nexus-data sonatype/nexus3
2.5、步骤五:查看 Nexus3 容器启动状态

在服务器命令行输入如下命令,查看 Nexus3 容器启动状态:

$ docker ps

可以看到,Nexus3 容器启动成功,监听了 8081 端口。

image-20241023102250642

3、环境配置

搭建完 Nexus3 环境后,我们还需要对其进行配置,具体配置的步骤如下所示。

3.1、步骤六:打开 Nexus3 页面

Nexus3 容器启动时监听的端口和宿主机端口都是 8081,所以,我们在浏览器地址栏输入 http://宿主机IP地址:8081 打开 Nexus3 页面:

image-20241023104610361

3.2、步骤七:登陆 Nexus3 用户

点击 Nexus3 右上角的登录(Sign in),点击后会弹出如下图所示的提示框:

image-20241023104834560

对于第一次登陆,初始密码的存放位置为 /nexus-data/admin.password,因为我们在启动 Nexus3 容器时,将 Nexus3 容器的 /nexus-data 目录映射到了宿主机的 /usr/local/nexus-data 目录,所以,我们在宿主机的 /usr/local/nexus-data 目录中也能够查询到 admin.password 文件。

$ cat /usr/local/nexus-data/admin.password 

此时,我们就查看到登录 Nexus3 的 admin 账号的密码为 13250a0a-1c02-498a-b15a-0a7aabad1add

image-20241023105124976

将 admin 账号和对应的密码输入到提示框中,即可登录 Nexus3。

image-20241023105434087

Ps:首次登录后会自动弹出完成必要设置的提示框,点击 Next 按钮,设自行置新密码,用于后续登录 Nexus。之后点击 Next 按钮,选择 Enable anonymous access 再次点击 Next 按钮后,点击 Finish 按钮,即可完成设置。

3.3、步骤八:配置阿里云代理仓库

如下图所示,Nexus 默认使用的远程仓库为 maven-central,从这个远程仓库下载依赖很慢,经常连不上。

image-20241023105926352

鼠标单机 maven-central 仓库,查看 maven-central 仓库配置的远程链接,如下图所示:

image-20241023110229530

可以看到,maven-central仓库配置的远程链接为 https://repo1.maven.org/maven2/,从这个远程仓库下载依赖很慢,经常连不上,所有我们需要配置阿里云远程代理仓库。

这里我们回到 Repositories 页面,点击 Create repository 按钮:

image-20241023110342728

点击后进入选择仓库类型的页面,这里我们选择 maven2(proxy) 类型。

点击选则 maven2(proxy) 类型后,进入配置远程代理仓库的页面:

image-20241023110635213

其中,每个配置项如下所示。

  • Name:aliyun-central

  • Version policy:Release

  • Layout policy:Strict

  • Remote storage:http://maven.aliyun.com/nexus/content/groups/public

接下来,拖动页面右侧的滚动条,滑到最下面,点击 Create repository 按钮

image-20241023110758722

点击 Create repository 按钮后,就可以在 Repositories 列表中看到新配置的阿里云代理仓库了

image-20241023110938648

并且 Status 显示的是 Online - Ready to connect,说明阿里云远程仓库配置成功。

3.4、步骤九:配置仓库组

接下来,需要将 aliyun-central 配置到仓库组,并且将 aliyun-central 排在 maven-central 上面。

Repositories 列表中,点击 maven-public

image-20241023111546769

点击进入页面后,下拉页面右侧的滚动条,找到如图所示的配置

image-20241023111546769

aliyun-central 移动到右侧,并排在最上面后,点击 Save 按钮保存配置。

3.5、步骤十:创建用户

接下来,创建一个用于上传 Jar 包到仓库的用户,具体步骤如下所示。

点击 Security 菜单下的 Users 菜单,再之后点击 Create local user 按钮

image-20241023111759283

随后,按照下图所示设置用户的基本信息

image-20241023112221068

这里,自行记录用户的密码,将 Status 设置为 Active 来启用账户,并设置账号的角色为 nx-admin,配置好之后,点击底部的 Create local user 按钮即可。

点击后在 Security 菜单下的 Users 菜单的用户列表中,可以查看到新创建的本地用户

image-20241023112533618

至此,Nexus3 配置完毕。


4、配置本地 Maven 仓库

配置完 Nexus 后,接下来,还需要对本地的 Maven 仓库进行配置,主要就是对 Maven 的 settings.xml 文件进行配置

4.1、步骤十一:复制 settings 文件

复制 setting.xml 文件为 setting-lizhengi.xml 文件

4.2、步骤十二:配置 servers 节点

在 settings-lizhengi.xml 文件中,找到 servers 节点,在 servers 节点中,配置在步骤十中创建的用户

<server>
    <id>binghe</id>
    <username>lizhengi</username>
    <password>myPassword</password>
</server>
4.3、步骤十三:配置 mirrors 节点

在 settings-lizhengi.xml 文件中,找到 mirrors 节点,在 mirrors 节点中,配置仓库地址

<mirrors>
    <mirror>
        <id>lizhengi-nexus</id>
        <name>Lizhengi Nexus3</name>
        <url>http://tencentcloud:8081/repository/maven-public</url>
        <mirrorOf>*</mirrorOf>
    </mirror>
    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>
4.4、步骤十四:配置profiles节点

在 settings-lizhengi.xml 文件中,找到 profiles 节点,在 profiles 节点中,配置仓库信息:

<profile>
    <id>maven-public</id>
    <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
    </activation>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    </properties>
    <repositories>
        <repository>
            <id>nexus-public</id>
            <url>http://tencentcloud:8081/repository/maven-public/</url>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </snapshots>
        </repository>
    </repositories>
</profile>

至此,Maven私服仓库搭建完毕,并且本地Maven也已经配置完毕。

后续使用 Maven 构建项目时,指定使用 settings-lizhengi.xml 文件即可将依赖的 Jar 文件和生成的 Jar 文件上传到 Maven 私服仓库,如果使用 IDEA 编译项目,也需要在 IDEA 中,将 Maven 的配置文件指定为 settings-lizhengi.xml。


5、配置项目 pom.xml 文件

搭建完 Maven 私服仓库,配置好本地 Maven 仓库后,还需要在项目的 pom.xml 文件中进行相应的配置,具体如下所示:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <encoding>${project.build.sourceEncoding}</encoding>
            </configuration>
        </plugin>
        <!--发布代码Jar插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <version>2.8.2</version>
        </plugin>
        <!--发布源码插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <phase>install</phase>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
 
<distributionManagement>
    <repository>
        <!--这里的id与settings.xml中的servers节点配置的用户ID一直,这样才能使用配置的用户去上传到maven私有仓库 -->
        <!--此仓库对应的为RELEASE版本的jar-->
        <id>lizhengi</id>
        <url>http://tencentcloud:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <!--这里的id与settings.xml中的servers节点配置的用户ID一直,这样才能使用配置的用户去上传到maven私有仓库 -->
        <!--此仓库对应的为SNAPSHOT版本的jar-->
        <id>lizhengi</id>
        <url>http://tencentcloud:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

相关文章:

  • 【让POSTGRESQL支持MS SQLSERVER的 extension】 Babelfish for PostgreSQL介绍及源码安装
  • 【数据分享】1999—2023年我国地级市社会消费品零售总额和年末金融机构存贷款余额(Shp/Excel格式)
  • 010-Catch2
  • 《数字图像处理》第二章 2.3-2.4 图像传感获取与数字化学习笔记-最近邻插值、双线性插值、双三次插值
  • 不用 Tomcat?SpringBoot 项目用啥代替?
  • Helm 安装zookeeper集群
  • 【spring bean的生命周期】
  • 【前端】WebStorm中使用 Vue.js 构建用户信息提交表单
  • [C++面试] 迭代器与指针有什么区别?
  • nacos下载及安装
  • Flutter 学习之旅 之 flutter 不使用插件,实现简单带加载动画的 LoadingToast 功能
  • 力扣热题 100:二叉树专题经典题解析(前8道)
  • 嵌入式学习L6网络编程D3TCP
  • 百度百科更新!树莓集团宜宾项目的深远影响与意义
  • 【Azure 架构师学习笔记】- Azure Databricks (19) --Lakehouse
  • 我与DeepSeek读《大型网站技术架构》(10)- 维基百科的高性能架构设计分析
  • 中国证监会主席吴清:进一步优化差异化安排 更精准支持优质科技企业上市
  • VMware下载安装Ubuntu详解
  • 无头浏览器与请求签名技术-Cloudflare防护
  • Manus 演示案例:小红书笔记创作指南
  • 上海这边敲墙拆旧做啥网站的比较多/开发外包网站
  • 网站建设运营方案/合肥网站优化
  • 义乌 网站 制作/360推广
  • 网页版微信怎么删除聊天记录/seo网站关键词排名软件
  • 成都市文化馆网站建设/关键词优化方法
  • 网站布局图片/怎么制作一个网站5个网页