在现代软件开发中,私有仓库是企业管理和分发内部依赖的重要工具,能够提高开发效率、加强依赖管理并确保构建的稳定性。Nexus Repository Manager 作为市场上常见的私服解决方案,不仅支持 Maven,还支持 npm、PyPI 等多种格式,为团队提供了统一的制品管理平台。
本文将介绍如何使用 Docker 快速部署 Maven 私服 Nexus3,帮助开发者搭建高效的依赖管理和分发环境,同时减少环境配置的复杂性和维护成本。通过 Docker 部署,您可以轻松实现版本化控制、灵活配置以及跨平台的便捷使用,是中小型团队和企业的理想选择。
在研发的过程中,很多企业都会针对自身业务特点来定制研发一些工具类库,但是这些工具类库又不会对外公开,那如何在组织内部共享这些类库呢?一种很好的方式就是在公司内部搭建一套 Maven 私服仓库。
搭建 Maven 私服仓库可以提高项目构建和部署的效率、稳定性和安全性,同时方便管理内部开发的组件和私有库,比较适用于企业内部或者特定场景下的需求。
在服务器命令行输入如下命令,下载 Nexus3 镜像(视网络情况,可能需要耐心等待一会儿):
$ docker pull sonatype/nexus3
在服务器命令行输入如下命令,查看下载的 Nexus3 镜像。
$ docker images
可以看到,已经成功下载 Nexus3 镜像
在服务器命令行输入如下命令,创建 Nexus 的挂载文件夹:
$ mkdir /usr/local/nexus-data &&chown-R200 /usr/local/nexus-data
在服务器命令行输入如下命令,启动 Nexus3 容器:
$ docker run -d-p8081: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"-p8081:8081 --name nexus -v /usr/local/nexus-data:/nexus-data sonatype/nexus3
在服务器命令行输入如下命令,查看 Nexus3 容器启动状态:
$ dockerps
可以看到,Nexus3 容器启动成功,监听了 8081 端口。
搭建完 Nexus3 环境后,我们还需要对其进行配置,具体配置的步骤如下所示。
Nexus3 容器启动时监听的端口和宿主机端口都是 8081,所以,我们在浏览器地址栏输入 http://宿主机IP地址:8081
打开 Nexus3 页面:
点击 Nexus3 右上角的登录(Sign in
),点击后会弹出如下图所示的提示框:
对于第一次登陆,初始密码的存放位置为 /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
将 admin 账号和对应的密码输入到提示框中,即可登录 Nexus3。
Ps:首次登录后会自动弹出完成必要设置的提示框,点击 Next
按钮,设自行置新密码,用于后续登录 Nexus。之后点击 Next
按钮,选择 Enable anonymous access
再次点击 Next
按钮后,点击 Finish
按钮,即可完成设置。
如下图所示,Nexus 默认使用的远程仓库为 maven-central
,从这个远程仓库下载依赖很慢,经常连不上。
鼠标单机 maven-central
仓库,查看 maven-central
仓库配置的远程链接,如下图所示:
可以看到,maven-central
仓库配置的远程链接为 https://repo1.maven.org/maven2/
,从这个远程仓库下载依赖很慢,经常连不上,所有我们需要配置阿里云远程代理仓库。
这里我们回到 Repositories
页面,点击 Create repository
按钮:
点击后进入选择仓库类型的页面,这里我们选择 maven2(proxy)
类型。
点击选则 maven2(proxy)
类型后,进入配置远程代理仓库的页面:
其中,每个配置项如下所示。
Name:aliyun-central
Version policy:Release
Layout policy:Strict
Remote storage:http://maven.aliyun.com/nexus/content/groups/public
接下来,拖动页面右侧的滚动条,滑到最下面,点击 Create repository
按钮
点击 Create repository
按钮后,就可以在 Repositories
列表中看到新配置的阿里云代理仓库了
并且 Status 显示的是 Online - Ready to connect
,说明阿里云远程仓库配置成功。
接下来,需要将 aliyun-central 配置到仓库组,并且将 aliyun-central
排在 maven-central
上面。
在 Repositories
列表中,点击 maven-public
点击进入页面后,下拉页面右侧的滚动条,找到如图所示的配置
将 aliyun-central
移动到右侧,并排在最上面后,点击 Save
按钮保存配置。
接下来,创建一个用于上传 Jar 包到仓库的用户,具体步骤如下所示。
点击 Security
菜单下的 Users
菜单,再之后点击 Create local user
按钮
随后,按照下图所示设置用户的基本信息
这里,自行记录用户的密码,将 Status
设置为 Active
来启用账户,并设置账号的角色为 nx-admin,配置好之后,点击底部的 Create local user
按钮即可。
点击后在 Security 菜单下的 Users 菜单的用户列表中,可以查看到新创建的本地用户
至此,Nexus3 配置完毕。
配置完 Nexus 后,接下来,还需要对本地的 Maven 仓库进行配置,主要就是对 Maven 的 settings.xml 文件进行配置
复制 setting.xml 文件为 setting-lizhengi.xml 文件
在 settings-lizhengi.xml 文件中,找到 servers 节点,在 servers 节点中,配置在步骤十中创建的用户
<server><id>binghe</id><username>lizhengi</username><password>myPassword</password></server>
在 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>
在 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。
搭建完 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>
提示:请勿发布广告垃圾评论,否则封号处理!!