Nexus Maven私服

发布于:2025-06-29 ⋅ 阅读:(23) ⋅ 点赞:(0)

简述

在上一篇文章中,我介绍了如何封装自己的SpringBoot Starter。

可能有想法去对某个功能做封装,使其成为一个自定义starter。但思考这样一个问题:

你正在开发一个项目,正好可以使用你自定义的starter,于是你将其引入到了项目中。如果你一直在你自己的电脑上开发的话,那没有什么问题。但是如果你换了电脑或者别人要协同你开发,重新从git上拉下代码,是下载不到你自定义的starter依赖的,因为starter一直都在你的本地maven仓库!

所以,无论对于个人还是公司,有一个私有maven仓库是很便利的。你不仅仅能将你的starter上传上去,还能将普通的maven项目上传上去,更重要的是你的代码永远在自己手中而不必暴露出去。

私有maven仓库的实现:NEXUS。你可能已经见过它了,阿里的镜像仓库也是用它做的。在maven的setting.xml中的阿里镜像中就有“nexus”一词。

技术前提

对于屏幕前的小伙伴,希望你们有一些关于:maven、docker的基础知识。如果有自己的服务器就更好了,没有的话windows也可以。

硬性要求就是需要安装Docker。(Linux安装docker:Linux(centos)安装docker_linux 的 docker 哪个稳定-CSDN博客

安装nexus

镜像地址:https://hub.docker.com/r/sonatype/nexus3

拉一个最新的:

docker pull sonatype/nexus3:latest

拉取下来后就是运行了,我们需要知道,我们上传上去的数据很重要,所以仓库一定要映射出来。

而且,nexus也是java项目,它的默认参数是:-Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m -Djava.util.prefs.userRoot=${NEXUS_DATA}/javaprefs,服务器内存可能不够起不起来,所以改小一点(我踩坑了)。

很重要的一点:如果你的nexus能启动但是报错停止运行,那么大概率是因为你第一次启动内存不足而导致orientdb数据库损坏,最简单的做法是是删除nexus容器,删除nexus镜像,删除数据卷(docker volume ls docker volume rm nexus-data )。然后重新拉镜像,重新运行。我报错是Schema is not created and cannot be loaded DB name="config"

docker run -d -p 666:8081 --name nexus -e INSTALL4J_ADD_VM_PARAMS="-Xms512m -Xmx512m -XX:MaxDirectMemorySize=1200m" -v nexus-data:/nexus-data sonatype/nexus3

容器中expose的是8081端口,主机端口自行设置,比如我的666端口

因为启动比正常的容器要久一点,所以别急。可以查看日志:

docker logs -f nexus

启动成功后,浏览器ip+端口访问即进入该页面: 

这时,我们点击右上角登录。用户名为admin,密码稍微麻烦一点。首先查看我们的匿名数据卷挂载的目录:docker volume inspect nexus-data: 

 

然后进入这个目录有一个叫admin.password的文件,里面放的就是admin的登录密码。

使用cat admin.password查看密码,是一个随机字符串,登录成功后会让我们改密码的,不用担心记不住。

登陆后,会有四个设置步骤。

第一个直接next,

第二个就是设置新密码,

第三个询问我们是否允许匿名访问(就是外人能不能访问该站点),我们既然搭建私服,就不应该允许匿名访问,勾选disable,

第四个完成确认。

安装运行完成,下面就开始介绍如何使用nexus了。

仓库介绍

nexus仓库分三种类型

  • proxy 代理仓库,比如代理到maven中央仓库。
  • hosted 宿主仓库,即自己的私人仓库。
  • group 仓库组,由多个仓库组成,当要下载依赖时会遍历每个仓库去找。

其中,hosted 宿主仓库又分为:releases 和shapshots,分别表示依赖的版本的发行版、快照版。快照版依赖不能上传到发行版仓库,反之亦然。nexus做了限制。

仓库格式有两种

  • maven2
  • nuget

我们搞java的只需要关心maven2的就好了。

其实能猜到我们使用最多的就是仓库组,可以把代理仓库、releases 和shapshots一起放进去,这样就完美实现:能从私服下载依赖,找不到还能去代理仓库那找。我们只需要在本地maven中配置下载镜像从私服上的仓库组下载就行了。

仓库组

其默认的仓库组也是这样干的,把代理仓库、releases 和shapshots这三个仓库都放进去了。

点击就能进去看仓库详情了: 

选择要操作的仓库,然后中间左右移动,就能向仓库组添加、移除仓库了。

代理仓库

默认创建好的代理仓库是代理到maven中心仓库的:

点击进入可以看到: 

总所周知,国内在maven中心仓库下载依赖很慢,所以我们可以重新创建一个代理仓库,然后代理到阿里的镜像仓库: 

仓库类型很多,但我们只需要关心maven格式的即可: 

仓库名字、代理地址必填,其余可以默认值(存储类型根据需要,默认只保存release依赖,maximum那些是设置缓存时间的) 

阿里的镜像仓库地址:https://maven.aliyun.com/nexus/content/groups/public

创建完成后,把这个仓库放到仓库组里面,可以将ali的代理仓库放第一位。

大致操作就是这样的,下面开始本地maven配置。

上传依赖

首先找到本地maven的setting.xml,打开后找到servers标签。加入以下内容

  <servers>
    <!-- 这是配置访问私有仓库的用户名密码 -->
    <server>
      <!-- id标签可以随便填,只需要在servers中唯一即可,后面很多地方会使用该id -->
      <id>self-maven</id>
      <username>dev</username>
      <password>xpxp1998</password>
    </server>
      
  </servers>

用户名密码可在nexus设置中去创建用户,分配对应全新,不建议使用admin账号。

maven配置好了,接下来去maven项目中设置:

在你想上传的模块的pom文件中,写入:

<distributionManagement>
		
        <repository>
            <id>self-maven</id>
            <url>http://ip:port/repository/maven-releases/</url>
        </repository>

        <snapshotRepository>
            <id>self-maven</id>
            <url>http://ip:port/repository/maven-snapshots/</url>
        </snapshotRepository>
    
    </distributionManagement>
  • repository标签是代表上传release版本
  • snapshotRepository标签代表上传snapshot版本

会根据该模块的版本进行自动选择,如果你的版本号带有SNAPSHOT如:<version>0.0.1-SNAPSHOT</version>,那么会上传到SNAPSHOT仓库,release也是这个道理,如果版本号不存在这两个单词,如1.0.0,那么会选择release仓库上传。

标签中的 id,就是上面我们配置的server id,maven会通过这个id去server中拿用户名密码去访问私服仓库。

标签中的url,就是对应仓库的地址:仓库的url复制即可,注意对应仓库,弄反了是传不上去的

ok,针对上传,我们已经配置好了,那么如何上传呢? 

在idea右侧,maven中,选择要上传的模块,点击deploy(发布)即可

会先下载一些东西,然后上传。

发布后,在对应的仓库也能查看,我这里是snapshot仓库:

上传到这里就可以了,但有一点需要注意的是,release仓库需要把 

设置为Allow redeploy代表允许我们对仓库中的依赖维护升级新版本,如果设置为disable redeploy意味着我们无法将升级版本上传上来。

下载依赖

接下来,配置本地maven。

还是打开setting.xml,找到mirrors标签。

然后添加一个mirror标签:

<mirror>
    <id>self-maven</id>
    <mirrorOf>*</mirrorOf>
    <url>仓库组的url/</url>
</mirror>

前阿里的镜像可以注释了,

添加的镜像:

  • id 之前server的id,访问仓库组也要拿用户名密码
  • mirrorOf *代表所有的依赖都从私服找
  • url 就是仓库组的,还是去仓库组右边copy即可

到这里就能使用私服下载依赖了。

我们需要把之前创建的阿里镜像代理仓库放到仓库组中。

maven-public这个仓库组,把ali代理仓库加进去就行了:

tip:最好在maven配置中还是加上阿里镜像仓库 ,有时会出现拉取不下来的情况,即使group中有阿里仓库

<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

 

 

 

 

 

 

 


网站公告

今日签到

点亮在社区的每一天
去签到