研发提效必备技能:手把手教你基于Docker搭建Maven私服仓库

news2024/12/23 15:28:05

沉淀,成长,突破,帮助他人,成就自我。

大家好,我是冰河~~

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

一、背景知识

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

就拿我们星球的分布式IM即时通讯系统来说,对于后端服务,我们将其划分成了 多系统共用模型与工具、即时通讯后端服务、大后端平台、即时通讯SDK、OpenAI大模型接入服务 等。

其中,多系统共用模型与工具会被其他服务依赖,即时通讯SDK和OpenAI大模型接入服务也会被其他服务依赖,并且多系统共用模型与工具、即时通讯SDK和OpenAI大模型接入服务都是我们开发分布式IM即时通讯系统时的私有库和组件,所以,在设计和研发分布式IM即时通讯系统的过程中,我们也需要搭建一套自己的Maven私服来统一管理这些私有库和组件。

好了,那接下来,我们就一起搭建Maven私服仓库吧。

二、环境说明

  • 服务器版本:CentOS7
  • 主机名:binghe102
  • IP地址:192.168.106.102
  • Maven私服镜像:sonatype/nexus3

三、环境搭建

基于Docker搭建Maven私服的步骤如下所示。

3.1下载Nexus3镜像

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

docker pull sonatype/nexus3

这里,视网络情况,可能需要耐心等待一会儿。

3.2 查看Nexus3镜像

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

[root@binghe102 ~]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED         SIZE
sonatype/nexus3   latest    589f7296a4a2   23 months ago   655MB

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

3.3 创建Nexus3挂载文件夹

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

mkdir /usr/local/nexus-data && chown -R 200 /usr/local/nexus-data

3.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目录中查看到。

3.5 查看Nexus3容器启动状态

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

[root@binghe102 ~]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS         PORTS                                       NAMES
59e27830bbaa   sonatype/nexus3   "sh -c ${SONATYPE_DI…"   2 minutes ago   Up 2 minutes   0.0.0.0:8081->8081/tcp, :::8081->8081/tcp   nexus

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

四、Nexus3配置

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

4.1 打开Nexus3页面

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

在这里插入图片描述

4.2 登录Nexus3

点击Nexus3右上角的登录,如图2所示。

在这里插入图片描述

点击后会弹出如图3所示的提示框。

在这里插入图片描述

根据提示得知,初始密码的存放位置为/nexus-data/admin.password,因为我们在启动Nexus3容器时,将Nexus3容器的/nexus-data目录映射到了宿主机的/usr/local/nexus-data目录,所以,我们在宿主机的/usr/local/nexus-data目录中也能够查询到admin.password文件。

所以,在宿主机中输入如下命令即可查看到admin.password文件。

ll /usr/local/nexus-data

具体如图4所示。

在这里插入图片描述

输入如下命令查看admin.password文件的内容。

[root@binghe102 ~]# cat /usr/local/nexus-data/admin.password 
517842df-1a2d-49c9-b4c3-b9ad4cf0fe00

此时,我们就查看到登录Nexus3的admin账号的密码为517842df-1a2d-49c9-b4c3-b9ad4cf0fe00,将admin账号和对应的密码输入到图3所示的提示框中,即可登录Nexus3,如图5所示。

在这里插入图片描述

登录后的界面如图6所示。

在这里插入图片描述

可以看到,首次登录后会自动弹出完成必要设置的提示框,点击Next按钮,设置新密码,如图7所示。

在这里插入图片描述

这里,自行记录新设置的密码,用于后续登录Nexus。

点击Next按钮,选择nable anonymous access,如图8所示。

在这里插入图片描述

点击Next按钮,如图9所示。

在这里插入图片描述

点击Finish按钮,即可完成设置。

4.3 配置阿里云代理仓库

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

在这里插入图片描述

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

在这里插入图片描述

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

回到图10所示的页面,点击Create repository按钮,如图12所示。

在这里插入图片描述

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

在这里插入图片描述

点击选则maven2(proxy)类型后,进入配置远程代理仓库的页面,如图14所示。

在这里插入图片描述

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

  • Name:aliyun-central
  • Version policy:Release
  • Layout policy:Strict
  • Remote storage:http://maven.aliyun.com/nexus/content/groups/public

接下来,拖动3-14页面右侧的滚动条,滑到最下面,点击Create repository按钮,如图15所示。

在这里插入图片描述

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

在这里插入图片描述

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

4.4 配置仓库组

接下来,需要将aliyun-central配置到仓库组,并且将aliyun-central排在maven-central上面。具体步骤如下所示。

在Repositories列表中,点击maven-public,如图17所示。

在这里插入图片描述

点击后进入如图18所示的页面。

在这里插入图片描述

下拉页面右侧的滚动条,找到如图19所示的配置。

在这里插入图片描述

将aliyun-central移动到右侧,并排在最上面,如图20所示。

在这里插入图片描述

点击Save按钮保存配置。

4.5 创建用户

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

点击Security菜单下的Users菜单,如图21所示。

在这里插入图片描述

点击Users菜单后,点击Create local user按钮,如图22所示。

在这里插入图片描述

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

在这里插入图片描述

这里,自行记录用户的密码,用于后续上传jar文件使用,配置好之后,点击底部的Create local user按钮即可。点击后在Security菜单下的Users菜单的用户列表中,可以查看到新创建的本地用户,如图24所示。

在这里插入图片描述

至此,Nexus3配置完毕。

五、配置本地Maven仓库

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

5.1 复制settings文件

复制setting.xml文件为setting-binghe.xml文件,如图25所示。

在这里插入图片描述

5.2 配置servers节点

在settings-binghe.xml文件中,找到servers节点,在servers节点中,配置5.5节创建的用户,如下所示。

<server>
    <id>binghe</id>
    <username>binghe</username>
    <password>binghe123</password>
</server>

5.3 配置mirrors节点

在settings-binghe.xml文件中,找到mirrors节点,在mirrors节点中,配置仓库地址,如下所示。

<!--本地私服仓库地址-->
<mirror>
    <id>central</id>
    <name>Local Repository</name>
    <url>http://192.168.106.102:8081/repository/maven-public</url>
    <mirrorOf>*</mirrorOf>
</mirror>
<!--阿里云仓库地址-->
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

5.4 配置profiles节点

在settings-binghe.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://192.168.106.102: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构建项目时,指定使用binghe-settings.xml文件即可将依赖的Jar文件和生成的Jar文件上传到Maven私服仓库,如果使用IDEA编译项目,也需要在IDEA中,将Maven的配置文件指定为settings-binghe.xml。

注意:我已经将settings-binghe.xml文件上传到本节对应源码分支的environment/maven目录下,大家自行获取即可。

六、项目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>binghe</id>
        <url>http://192.168.106.102:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <!--这里的id与settings.xml中的servers节点配置的用户ID一直,这样才能使用配置的用户去上传到maven私有仓库 -->
        <!--此仓库对应的为SNAPSHOT版本的jar-->
        <id>binghe</id>
        <url>http://192.168.106.102:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

是不是很简单?你照着文章一步步实操,就可以基于Docker搭建属于自己的Maven私服仓库了。

七、写在最后

这些真实场景的项目设计与落地实现,在冰河的知识星球除了分布式IM即时通讯系统外,还有其他5个项目,这些项目的需求、方案、架构、落地等均来自互联网真实业务场景,让你真正学到互联网大厂的业务与技术落地方案,并将其有效转化为自己的知识储备

好了,今天就到这儿吧,我是冰河,我们下期见~~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用支付宝的沙箱环境在本地配置模拟支付并发布至公网测试

文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级子域名8. 测试使用固定二级子域名访问 前言 在沙箱环境调试支付SDK的时候&#xff0c;往往沙箱环境部署在本地&#xff0c;局限性大&#xff0c;在沙箱环境…

oracle23安装并 配置内网代理(安装nginx oracle23)

安装nginx步奏如下 1.安装所需依赖 yum install -y gcc gcc-c pcre pcre-devel zlib zlib-devel openssl openssl-devel automake autoconf libtool make2. 解压nginx压缩包&#xff0c;进入解压后的nginx目录 tar -xvf ./nginx-1.24.0.tar.gzcd ./nginx3. 以下编译命令中增…

深度学习或机器学习的模型部署相关的初步了解及分析

机器学习-深度学习 部署相关资料文档 这是上班之后的第一个文档&#xff0c;由于项目原因需要去了解一些和模型部署相关的知识&#xff0c;所以就简单了解了一下相应的部署引擎和框架&#xff0c;也是刚刚开始学习&#xff0c;如果有什么写的不对的欢迎大家交流&#xff0c;看…

2024年3月电子学会青少年编程等级考试时间安排

1考试方式 1. 在线居家考试&#xff08;全国&#xff09;&#xff1b; 2. 对于符合线下考试要求的考试服务网点&#xff0c;经地方实地调研报学会总部批准后&#xff0c;可组织线下考试。 2报名时间 报名时间&#xff1a;2023年12月21日-2024年3月12日16:00&#xff1b; 考…

Web API ------- requestAnimationFrame

官方文档 requestAnimationFrame 是什么 window.requestAnimationFrame() 告诉浏览器——你希望执行一个动画&#xff0c;并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数&#xff0c;该回调函数会在浏览器下一次重绘之前执行 …

HTML输出特殊字符详细方法

以下是部分特殊字符代码表&#xff0c;它们的完整应用代码格式为&#xff1a;&#;用下面的四位数字替换&#xff0c;将得到对应的符号。&#xff08;注意&#xff1a;应用这些代码&#xff0c;编辑器应该切换到HTML模式&#xff09; ☏260f ☎260e ☺263a ☻263b ☼263c ☽…

【UML】第6篇 用例图(1/3)

目录 一、什么是用例图 二、参与者 2.1 什么是参与者 2.2 如何识别参与者 2.3 参与者之间的关系 从今天开始&#xff0c;就到了最干的各种的图的梳理和学习了&#xff0c;未来AI就能编码了&#xff0c;把业务建模和设计的基本功打好&#xff0c;也许能和AI和平相处呢。 一…

第三节TypeScript 基础类型

1、typescript的基础类型 如下表&#xff1a; 数据类型 关键字 描述 任意类型 any 生命any的变量可以赋值任意类型的值 数字类型 number 整数或分数 字符串类型 string 使用单引号&#xff08;‘’&#xff09;或者双引号&#xff08;“”&#xff09;来表示字符串…

nodejs微信小程序+python+PHP购物商城网站-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

3D模型格式转换工具如何实现高性能数据转换?请看CAE系统开发实例!

​ 客户背景 DP Technology是全球知名的CAM的供应商&#xff0c;在全球8个国家设有18个办事处。DP Technology提供的CAMESPRIT系统是一个用于数控编程&#xff0c;优化和仿真全方面的CAM系统。CAMESPRIT的客户来自多个行业&#xff0c;因此支持多种CAD工具和文件格式显得格外重…

区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第一套区块链系统部署与运维

第一套区块链系统部署与运维题目 环境 : ubuntu20 fisco : 2.8.0 子任务1-2-1: 搭建区块链系统并验证 题意: 要求搭建一条四节点的区块链系统,我们选择使用fisco作为此次测试的链子 我们使用build_chain.sh进行构建单机四节点,并且使用官方的默认端口【正式比赛大概率不…

java使用面向对象实现图书管理系统

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

算法基础之筛质数

筛质数 核心思想&#xff1a;筛法求质数 埃氏筛法: 每次用 2 3 4…. p-1 筛 2 - p之间的数出现2 3 4 …的倍数时 去掉(4实际已经被去掉 不会用4去筛)当2~p-1的数都没有筛掉p 说明p是质数 优化: 只用2~p-1中质数筛 线性筛法: 核心: n只会被其最小质因子筛掉 每一个合数都只…

如何使用AI智能写作API接口批量处理数据

有大量的数据&#xff0c;想使用AI智能写作工具进行批量操作处理&#xff0c;有没什么好方法&#xff1f; 可以使用简数采集器&#xff0c;支持自动采集数据&#xff0c;也支持批量导入数据&#xff0c;然后调用第三方AI智能写作API接口进行批量处理&#xff08;例如&#xff…

『 C++ 』二叉树进阶OJ题

文章目录 根据二叉树创建字符串 &#x1f996;&#x1f969; 题目描述&#x1f969; 解题思路&#x1f969; 代码 二叉树的层序遍历(分层遍历) &#x1f996;&#x1f969; 题目描述&#x1f969; 解题思路&#x1f969; 代码 二叉树的层序遍历(分层遍历)Ⅱ &#x1f996;&…

redis集群介绍

这里写自定义目录标题 redis集群是什么&#xff1f;redis集群方案1.节点2.槽指派3在集群中执行命令4.复制与故障转移5.消息 redis集群搭建参考文档 redis集群是什么&#xff1f; redis集群是一个由多个主从节点群组成的分布式服务集群&#xff0c;它具有复制、高可用和分片特性…

无锡算法大赛线下颁奖会,齐聚院士专家探讨前沿AI技术,大赛选手优秀获奖方案分享!

极市邀您参与“视界拓新知Al有所为 2023首届无锡国际人工智能算法大赛”&#xff0c;相聚美丽无锡&#xff01; 举行地点&#xff1a;无锡君来洲际酒店君来厅 举行时间&#xff1a;2023年12月27日&#xff08;周三&#xff09; 此次大会齐聚多名院士专家&#xff0c;分享前沿…

Linux/Windows IP | Team基础管理

引言 IP&#xff08;Internet Protocol&#xff09; 定义&#xff1a; IP&#xff08;Internet Protocol&#xff09;是网络传输数据的协议&#xff0c;负责在网络中唯一标识和定位设备&#xff0c;并提供数据传输的基础。功能&#xff1a; 允许计算机在网络上相互通信和交换…

做一个家政预约小程序需要了解哪些功能?

随着科技的发展&#xff0c;人们的生活方式发生改变&#xff0c;家政服务在快节奏的时代成为家庭必备。为了满足人们对家政服务的需求&#xff0c;许多家政公司开始寻求线上发展机会。小程序作为轻量级应用&#xff0c;逐渐成为家政行业的重要载体。本文将详细介绍家政小程序的…

【数据结构和算法】---二叉树(1)--树概念及结构

目录 一、树的概念及结构1.1 树的概念1.2 树的相关概念1.3 树的表示1.4 树在实际中的运用 二、二叉树的概念及结构2.1 二叉树概念2.2 特殊的二叉树2.3 二叉树的性质2.4 二叉树的存储结构 三、树概念相关题目 一、树的概念及结构 1.1 树的概念 树是一种非线性的数据结构&#…