使用 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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/951877.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

opencv 学习(3)

文章目录 画直线画圆画矩形画多边形文字绘制画板 本部分图形绘制 本节内容比较简单 直接上代码 画直线 import cv2 import numpy as np## 本节画直线## line 参数介绍 ## image 在那个图像上面 画线 ## 开始点借宿点 指定先的开始和结束的位置 ## 颜色 线宽 线性 ## shift…

Java-数据结构-栈与队列(StackQueue)

一、栈(Stack) ① 栈的概念 栈是一种特殊的线性表&#xff0c;它只允许固定一端进行"插入元素"和"删除元素"的操作&#xff0c;这固定的一端被称作"栈顶"&#xff0c;对应的另一端就被称做"栈底"。 &#x1f4da; 栈中的元素遵循后…

带格式 pdf 翻译

支持 openAI 接口&#xff0c;国内 deepseek 接口兼容 openAI 接口&#xff0c; deepseek api 又非常便宜 https://pdf2zh.com/ https://github.com/Byaidu/PDFMathTranslate

【如何从0到1设计测试用例使用Fiddler完成弱网测试】

&#x1f308;个人主页&#xff1a;努力学编程’ ⛅个人推荐&#xff1a; c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 ⭐⭐⭐测试用…

基础项目实战——贪吃蛇(c++)

目录 前言一、 游戏总体框架二、地图绘制三、光标隐藏四、地图定义五、蛇体定义六、蛇体绘制七、蛇体移动八、频率控制九、边界检测十、游戏失败十一、蛇体转向十二、食物生成十三、食物碰撞十四、整体代码十五、结语 前言 各位小伙伴们好久不见&#xff0c;前段时间非常的忙很…

排序:插入、选择、交换、归并排序

排序 &#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性 &#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&#xff0c;…

Windows service运行Django项目

系统&#xff1a;Windows Service 软件&#xff1a;nssm&#xff0c;nginx 配置Django项目 1、把Django项目的静态文件整理到staticfiles文件夹中 注&#xff1a;settings中的设置 STATIC_URL /static/ STATIC_ROOT os.path.join(BASE_DIR, staticfiles/) STATICFILES_DI…

comfyui精准作图之gligen

简介 在 Stable Diffusion&#xff08;SD&#xff09;中&#xff0c;GLIGEN 是一种用于增强文本到图像生成模型可控性的技术。它通过在现有的预训练扩散模型&#xff08;如 Stable Diffusion&#xff09;基础上&#xff0c;引入额外的定位输入&#xff08;如边界框、关键点或参…

【学习资源】MBSE和工业软件

工业软件从业者&#xff0c;需要学习与应用MBSE方法论&#xff0c;解决复杂问题的有效手段。笔者做一个简单介绍。 1 什么是MBSE&#xff1f; MBSE&#xff08;Model-Based Systems Engineering&#xff0c;基于模型的系统工程&#xff09;是一种系统工程方法论&#xff0c;其…

ue5 蒙太奇,即上半身动画和下半身组合在一起,并使用。学习b站库得科技

本文核心 正常跑步动画端枪动画跑起来也端枪 正常跑步动画 端枪动画的上半身 跑起来也端枪 三步走&#xff1a; 第一步制作动画蒙太奇和插槽 第二步动画蓝图选择使用上半身动画还是全身动画&#xff0c;将上半身端枪和下半身走路结合 第三步使用动画蒙太奇 1.开始把&a…

【Docker】docker compose 安装 Redis Stack

注&#xff1a;整理不易&#xff0c;请不要吝啬你的赞和收藏。 前文 Redis Stack 什么是&#xff1f; 简单来说&#xff0c;Redis Stack 是增强版的 Redis &#xff0c;它在传统的 Redis 数据库基础上增加了一些高级功能和模块&#xff0c;以支持更多的使用场景和需求。Redis…

视频转码对画质有影响吗?视频融合平台EasyCVR支持哪些转码格式?

视频转码过程是将视频文件从一种编码格式转换为另一种格式的过程&#xff0c;这一过程在现代数字媒体中扮演着至关重要的角色。众所周知&#xff0c;视频转码不仅仅是简单的格式转换&#xff0c;它涉及多个关键参数的改变&#xff0c;例如视频编码格式、比特率、分辨率以及帧率…

vscode开启调试模式,结合Delve调试器调试golang项目详细步骤

1.前期准备 (1).在vs code中的扩展程序中搜索并安装Go扩展程序 (2).安装 Delve 调试器 go install github.com/go-delve/delve/cmd/dlvlatest (3).打开vs code的命令面板&#xff0c;输入Go: Install/Update Tools&#xff0c;并单击该命令执行&#xff0c;安装或更新Go语…

springboot和vue配置https请求

项目场景&#xff1a; 代码发布到线上使用https请求需要配置ssl证书&#xff0c;前后端都需要修改。 问题描述 如图&#xff0c;我们在调用接口时报如下错误&#xff0c;这就是未配置ssl但是用https请求产生的问题。 解决方案&#xff1a; 前端&#xff1a;在vite.config.js文…

每日学习30分轻松掌握CursorAI:Cursor基础设置与配置

Cursor基础设置与配置 一、基础设置概览 1. 设置项分类表 设置类别主要功能重要程度语言设置界面及AI交互语言配置★★★★★快捷键配置自定义操作快捷键★★★★☆外观设置主题、字体、颜色方案★★★☆☆编辑器设置缩进、换行、代码风格★★★★☆AI功能设置AI响应灵敏度、…

设计模式(观察者模式)

设计模式&#xff08;观察者模式&#xff09; 第三章 设计模式之观察者模式 观察者模式介绍 观察者模式&#xff08;Observer Design Pattern&#xff09; 也被称为发布订阅模式 。模式定义&#xff1a;在对象之间定义一个一对多的依赖&#xff0c;当一个对象状态改变的时候…

QT 下拉菜单设置参数 起始端口/结束端口/线程数量 端口扫描4

上篇文章QT实现 端口扫描暂停和继续功能 3-CSDN博客 双击 添加对话框类 界面设计 由于主体代码已经写完&#xff0c;只需要更改参数的获取即可 获取起始端口结束端口的输入 槽函数 给主界面类添加调用对话框类的功能 实现功能&#xff1a;点击菜单项可以弹出对话框窗体 增加槽…

Unity自定义编辑器:基于枚举类型动态显示属性

1.参考链接 2.应用 target并设置多选编辑 添加[CanEditMultipleObjects] using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor;[CustomEditor(typeof(LightsState))] [CanEditMultipleObjects] public class TestInspector :…

《代码随想录》Day31打卡!

《代码随想录》贪心算法&#xff1a;合并区间 本题的完整题目如下所示&#xff1a; 本题的完整思路如下所示&#xff1a; 1.本题依然是先对数组的左边界进行排序。将数组的第一个元素赋值给current。 2.遍历数组&#xff0c;判断current中的右边界和当前元素的左边界是否有重叠…

灵活运用事务回滚,快捷处理多张数据表格

各位编程宝子们&#xff08;尤其是对MySQL了解不多的宝子们&#xff09;在使用关系表处理时&#xff0c;有时候会希望简单一次性解决多张表的数据处理&#xff0c;但又有时候无从下手。其实有时候掌握数据的事务和回滚便可以简单解决这些事情&#xff0c;接下来我将以一个学生信…