Nexus存储库管理器搭建-Maven私服详解

 更新时间:2025年06月12日 11:12:29   作者:微枫Micromaple  
这篇文章主要介绍了Nexus存储库管理器搭建-Maven私服,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

在企业开发过程中,就比如说我们Java程序员,一般都是使用Spring或者是SpringBoot项目进行开发的,基本上都是基于Maven或者是Gradle构建的项目,如果说我们使用的Maven仓库是中央仓库的话,在企业内部协同开发的时候,会带来诸多不便。

例如,当我们需要协同开发时,难免会对Jar包进行管理,不可能将我们的Jar包上传至中央仓库去,所以我们需要搭建属于内部的Maven仓库。Maven私服仓库也有者诸多好处。

本文详细讲述了 Maven私服的搭建、Jar包部署以及SpringBoot配置。

一、概述

Nexus 是一个存储库管理器,极大地简化了内部仓库的维护和外部仓库的访问。

有非常简单便捷的用户操作界面,方便对Nexus操作及管理。

在 Nexus 3.0 版本后,增加了对 Docker、NetGet、npm、Bower的支持。

二、为什么要使用Maven私服仓库

大家可能会有一个疑问,为啥要搭建Maven私服呢?使用官方的Maven仓库不就可以吗?而且国内也有镜像加速地址,比如阿里等。而我们去搭建一个Maven私服,需要在服务器单独进行搭建,还要进行维护。

针对这些问题,下面是使用Maven私服的好处:

  • 托管内部存储库: 可以共享内部依赖项,以方便将依赖项安装在每个开发人员的本地存储库中。
  • 加速Maven构建: 当在 Maven 中运行多模块项目时,如果项目依赖于几个 SNAPSHOT,或者没有指定插件版本,Maven 可能必须向远程存储库发出数十到数百个请求。安装 Nexus 的本地实例后将构建时间大大的缩减了。
  • 节省带宽: 如果没有 Maven 私服,开发人员会浪费带宽一遍又一遍的从中央仓库下载相同的文件。使用 Nexus 来保留本地缓存将节省大量带宽。
  • 控制和审计: 可以有效的控制开发团队将使用哪些依赖项。
  • 可上传部署第三方Jar: 可以方便的上传第三方Jar包,并对其进行管理。
  • 可预测性和稳定性: 依靠中央仓库进行日常运营也意味着依赖于互联网连接,如果有 Nexus ,则可以确保即使失去互联网连接,构建工作也可以继续进行。

三、搭建Nexus

这里使用docker来搭建Nexus。

1)、创建文件夹

mkdir -p /usr/local/docker/nexus

2)、创建docker-compose文件

vi /usr/local/docker/nexus/docker-compose.yml

docker-compose.yml内容如下:

version: '3.1'
services:
  nexus:
    restart: always
    image: sonatype/nexus3
    container_name: nexus
    privileged: true
    ports:
      - 8081:8081
    volumes:
      - ./data:/nexus-data

3)、启动

启动命令

docker-compose up -d

如果遇到文件夹权限问题,使用命令更改文件夹权限chmod -R 777 data,然后在重新启动

4)、访问

启动完成后,浏览器访问http://IP:8081/,效果如下:

5)、登录

登录Nexus,点击右上角 Sign in,第一次登录会提示admin的密码在哪,根据提示去相关目录查看。docker-compose中映射nexus-data目录为/usr/local/docker/nexus/data目录,所以我们在data目录去找admin.password文件即可看到密码了。

查看密码

$ cat admin.password 
1cf97ae1-270f-47e5-8c83-f5af04af34af

登录后会提示设置新的密码,设置一个记得住的密码即可。

四、SpringBoot整合

my-project项目为例。

4.1、pom.xml配置

有一个统一的依赖管理模块my-project-dependencies,在pom.xml中增加部署服务器的 Maven 节点内容以及仓库地址,内容如下:

<!-- 部署服务器的 Maven 节点 -->
<distributionManagement>
	<repository>
		<id>nexus-releases</id>
		<name>Nexus Release Repository</name>
		<url>http://192.168.110.158:8081/repository/maven-releases/</url>
	</repository>
	<snapshotRepository>
		<id>nexus-snapshots</id>
		<name>Nexus Snapshot Repository</name>
		<url>http://192.168.110.158:8081/repository/maven-snapshots/</url>
	</snapshotRepository>
</distributionManagement>

<repositories>
	<repository>
		<id>nexus</id>
		<name>Nexus Repository</name>
		<url>http://192.168.110.158:8081/repository/maven-public/</url>
		<snapshots>
			<enabled>true</enabled>
		</snapshots>
		<releases>
			<enabled>true</enabled>
		</releases>
	</repository>

	<repository>
		<id>aliyun-repos</id>
		<name>Aliyun Repository</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public</url>
		<releases>
			<enabled>true</enabled>
		</releases>
		<snapshots>
			<enabled>false</enabled>
		</snapshots>
	</repository>

	<repository>
		<id>sonatype-repos</id>
		<name>Sonatype Repository</name>
		<url>https://oss.sonatype.org/content/groups/public</url>
		<releases>
			<enabled>true</enabled>
		</releases>
		<snapshots>
			<enabled>false</enabled>
		</snapshots>
	</repository>
	<repository>
		<id>sonatype-repos-s</id>
		<name>Sonatype Repository</name>
		<url>https://oss.sonatype.org/content/repositories/snapshots</url>
		<releases>
			<enabled>false</enabled>
		</releases>
		<snapshots>
			<enabled>true</enabled>
		</snapshots>
	</repository>

	<repository>
		<id>spring-snapshots</id>
		<name>Spring Snapshots</name>
		<url>https://repo.spring.io/snapshot</url>
		<snapshots>
			<enabled>true</enabled>
		</snapshots>
	</repository>
	<repository>
		<id>spring-milestones</id>
		<name>Spring Milestones</name>
		<url>https://repo.spring.io/milestone</url>
		<snapshots>
			<enabled>false</enabled>
		</snapshots>
	</repository>
</repositories>

<pluginRepositories>
	<pluginRepository>
		<id>nexus</id>
		<name>Nexus Plugin Repository</name>
		<url>http://192.168.110.158:8081/repository/maven-public/</url>
		<snapshots>
			<enabled>true</enabled>
		</snapshots>
		<releases>
			<enabled>true</enabled>
		</releases>
	</pluginRepository>

	<pluginRepository>
		<id>aliyun-repos</id>
		<name>Aliyun Repository</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public</url>
		<releases>
			<enabled>true</enabled>
		</releases>
		<snapshots>
			<enabled>false</enabled>
		</snapshots>
	</pluginRepository>
</pluginRepositories>

将IP地址更改为自己的就可以了

4.2、测试部署

使用dos窗口进入my-project-dependencies目录下,执行部署命令

mvn deploy

此时出现失败,关键信息Return code is: 401, ReasonPhrase: Unauthorized. ,错误问题是未授权

我们打开我们配置的Maven的settings.xml,在servers节点增加如下配置

<server>
  <id>nexus-releases</id>
  <username>admin</username>
  <password>123456</password>
</server>
<server>
  <id>nexus-snapshots</id>
  <username>admin</username>
  <password>123456</password>
</server>
  • id: 与构建项目的pom.xml中的repository的id一致。
  • username: 部署用户(可在Nexus中单独创建一个用户专门拿来部署,这里直接使用admin)
  • password: 登录密码

配置好这些后,先将原先的命令窗口关闭,打开一个新的,在执行一次部署命令

mvn deploy

部署成功,接着我们打开Nexus端查看部署上来的项目

在 Maven 私服中也可以看到,大功告成~

五、上传部署Jar包

在开发过程中,我们可能会单独的对Jar进行管理,而我们手中又只有一个Jar文件。这时,我们需要使用到Nexus的上传功能

1)、点击Upload->选择需要上传的仓库

2)、上传Jar包,填写表单信息

3)、上传成功

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • feign调用返回object类型转换方式

    feign调用返回object类型转换方式

    这篇文章主要介绍了feign调用返回object类型转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • java -jar指定外部配置文件操作步骤

    java -jar指定外部配置文件操作步骤

    这篇文章主要给大家介绍了关于java -jar指定外部配置文件的相关资料,需要的朋友可以参考下
    2023-11-11
  • Java如何获取当天零点和明天零点的时间和时间戳

    Java如何获取当天零点和明天零点的时间和时间戳

    这篇文章主要介绍了如何在Java中获取当天零点和明天零点的时间和时间戳,并提供了示例代码,新手小白完全可以通过文中介绍的代码实现,需要的朋友可以参考下
    2025-03-03
  • Mybatis-plus中IService接口的基本使用步骤

    Mybatis-plus中IService接口的基本使用步骤

    Mybatis-plus是一个Mybatis的增强工具,它提供了很多便捷的方法来简化开发,IService是Mybatis-plus提供的通用service接口,封装了常用的数据库操作方法,包括增删改查等,下面这篇文章主要给大家介绍了关于Mybatis-plus中IService接口的基本使用步骤,需要的朋友可以参考下
    2023-06-06
  • Spring Boot与Docker部署详解

    Spring Boot与Docker部署详解

    本篇文章主要介绍了Spring Boot与Docker部署详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Java中集合遍历的方法示例代码展示

    Java中集合遍历的方法示例代码展示

    在 Java 编程中,集合(Collection)是用于存储和操作一组对象的重要工具,无论是数组、列表(List)、集合(Set),还是映射(Map),它们都提供了在不同场景下灵活使用的数据结构,这篇文章主要介绍了Java中集合遍历的方法示例代码展示,需要的朋友可以参考下
    2024-08-08
  • 用Java实现OCR功能揭秘

    用Java实现OCR功能揭秘

    想知道如何用Java实现OCR功能吗?本指南将揭秘这一神秘技术,让你轻松掌握OCR的实现方法,无论是想提升技能还是解决问题,这篇指南都能帮助你一臂之力,需要的朋友可以参考下
    2023-12-12
  • Java注解详解及实现自定义注解的方法

    Java注解详解及实现自定义注解的方法

    这篇文章主要介绍了Java注解详解及实现自定义注解的方法,本文给大家介绍了jdk中预定义的一些注解及自定义注解的相关知识,需要的朋友可以参考下
    2022-06-06
  • java调用百度的接口获取起-止位置的距离

    java调用百度的接口获取起-止位置的距离

    本文主要介绍了java调用百度的接口获取起-止位置的距离,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • java实现打印日历

    java实现打印日历

    这篇文章主要为大家详细介绍了java打印日历的实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01

最新评论