CentOS搭建并配置Nexus3记录

7 篇文章 1 订阅

概述

理论

不感兴趣的,可以直接可忽略。Nexus3,即nexus的3.*版本,功能已经非常强大,且支持很多语言和类型的仓库,以本文安装的3.29.2-02为例,支持:apt、bower、cocoapods、conan、conda、docker、gitlfs、go、helm、maven2、npm、nuget、p2、pypi、r、raw、rubygems、yum。

用户角色与权限

定时调度任务

Nexus提供一系列可配置的定时调度任务来方便用户管理nexus系统,定时调度时间,即cron表达式,支持手写cron表达式,前提是cron表达式的合法性:
在这里插入图片描述
调度任务会在指定时间在后台运行,当然建议放在深夜执行。

以管理员账户登录,点击左侧导航菜单中的Tasks,然后再右边的界面上单击Add按钮,按照页面上的提示填写相关内容。

Nexus包含以下几种类型的调度任务:

  • Download Indexs:为代理仓库下载远程索引
  • Empty Trash:清空Nexus的回收站,一些操作实际是将文件移到回收站中
  • Evict Unused Proxied Items From Repository Caches:删除代理仓库中长期未被使用的构件缓存
  • Expire Repository Cache:Nexus为代理仓库维护了远程仓库的信息以避免不必要的网络流量,该任务清空这些信息以强制Nexus去重新获取远程仓库的信息
  • Publish Indexs:将仓库索引发布成可供m2eclipse和其他Nexus使用的格式
  • Purge Nexus Timeline:删除Nexus的时间线文件,该文件用于建立系统的RSS源
  • Rebuild Maven Metadata Files:基于仓库内容重新创建仓库元数据文件maven-metadata.xml,同时重新创建每个文件的校验和md5与sha1
  • ReIndex Repositories:为仓库编纂索引
  • Remove Snapshots From Repositories:以可配置的方式删除仓库的快照构件
  • Synchronize Shadow Repository:同步虚拟仓库的内容(服务基于Maven1)

安装

下载压缩包文件:
wget
解压:tar -zxvf nexus-3.29.2-02-unix.tar.gz
移动到指定目录:mv nexus-3.29.2-02 /usr/local/nexus3

配置浏览器访问的IP和端口号:vim /usr/local/nexus3/etc/nexus-default.properties,将application-host=0.0.0.0修改为application-host=<your_ip>,端口还是使用默认的8081。

切换到bin目录:cd /usr/local/nexus3/bin/

启动:./nexus start

此时应该就能打开浏览器访问刚才配置的地址:http://<ip>:8081

如果不行,一般就是防火墙没有关,由于是内网搭建的私服,可放心关闭防火墙:systemctl stop firewalld

设置为开机自启动:systemctl enable nexus

若报错:
Unit nexus.service could not be found.

则创建连接到 /etc/init.d下:
ln -s /usr/local/nexus3/bin/nexus /etc/init.d/nexus

设置为开机启动:systemctl enable nexus

输出:

nexus.service is not a native service, redirecting to systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable nexus

说明成功。

登录,默认的用户名是admin,密码存储在文件/usr/local/sonatype-work/nexus3/admin.password中,按照系统指引,可修改密码。

安装成功的界面:
在这里插入图片描述

实战

添加阿里云代理仓库

如图:
在这里插入图片描述
可知,仓库类型有三种:

  • Hosted:本地仓库,可部署自己的构件到这类型的仓库。比如公司的第二方库;
  • Proxy:代理仓库,被用来代理远程的公共仓库,如maven中央仓库;
  • Group:仓库组,用来合并多个hosted/proxy仓库,当项目需要引用多个repository资源时,只需要将这些资源放到一个group中,引用这一个group即可;

注意得先登录:
在这里插入图片描述
登录之后,才有配置权限:
在这里插入图片描述
添加仓库:
在这里插入图片描述
因为是添加阿里云代理仓库,故选择Proxy类型:
在这里插入图片描述
有三个信息必须配置:
在这里插入图片描述
第一个表示唯一性的名字,输入aliyun即可;
第一个是地址,既然是阿里云,输入http://maven.aliyun.com/nexus/content/groups/public/;
第三个是存储位置,点击下拉列表,选择default即可。
在这里插入图片描述
至此,阿里云代理仓库添加成功,但是并不推荐直接使用,搭建nexus私服的目的并不仅仅只是把阿里云maven仓库的jar拷贝一份放在自己内网的私服仓库,这样并不能提升多少构建速度。
请继续往下看。

结合settings.xml

上面提到Hosted类型仓库,适用场景主要就是工程A需要引用工程B的jar,然后从内网的nexus私服仓库去下载。
因此我们还需要添加一个Hosted类型的仓库,和上面添加代理仓库步骤类似,只不过这个类型的仓库,只需要配置两个参数,一个表示仓库唯一性的名字和存储位置。

问题,为何Nexus提供Group类型的仓库?
试想:极少情况下,如果需要的jar包在阿里云找不到,是不是还需要添加其他地址的代理仓库,这样settings.xml配置文件是不是得添加好几个仓库镜像地址?
故此,引入Group类型的仓库。有三个必须填写的配置项,一个表示唯一性的名字和存储地址,以及下属仓库(Member repositories):
在这里插入图片描述
效果图:
在这里插入图片描述
左侧即为备选的仓库,右侧为选中的仓库,注意优先级顺序

最终效果图:
在这里插入图片描述
选择group,点copy,得到形如:http://xxx:8081/repository/group/的地址,放到settings.xml里即可:

<mirrors>
	<mirror>
	    <id>nexus</id>
	    <mirrorOf>*</mirrorOf>
	    <name>aliyun</name>
	    <url>http://xxx:8081/repository/group/</url>
	</mirror>
</mirrors>

参考:使用Nexus3搭建Maven私服+上传第三方jar包到本地maven仓库

目前,我们使用的 maven-public 组包括如下四个,其中 maven-releases, maven-snapshots,和 maven-central 是 Nexus 默认包含的。
在这里插入图片描述

maven-central 是自带的 Proxy 类型,指向 https://repo1.maven.org/maven2/

aliyun-central是新增的 Proxy 类型,指向 https://maven.aliyun.com/repository/central

如上配置能满足绝大多数情况下(6个9,99.9999%)的依赖包下载。

上述配置能下载的依赖包,都能在 https://maven.aliyun.com/mvn/search 里面搜索到

之前使用一个 joda 包。

<dependency>
    <groupId>org.joda.time</groupId>
    <artifactId>joda</artifactId>
    <version>2.3</version>
</dependency>

这玩意在阿里云搜不到:
在这里插入图片描述
所以依赖下载失败。

解决方法:

使用正确的GAV:

<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.10.10</version>
</dependency>

手动上传,尤其适用于那些第三方私有SDK、API包

先学习一下 https://maven.aliyun.com/mvn/guide, 了解仓库的概念,知道除了maven官方仓库,还有jcenter,jboss等仓库。
比如,有些依赖包确实是在阿里云 central 里面搜不到,但是在 jcenter 里面有(下面的截图的例子不好,之前遇到过,暂时找不到满足条件的依赖包,即在 central 里面不存在,jcenter 里面存在的依赖包)
在这里插入图片描述
解决方法:

  1. 手动下载,再上传,可行,因为确实没有必要使用下面的配置方法;真的很难遇到找不到依赖包的情况
  2. 把 jcenter 作为一个新的 Proxy repository 配置到我们的私服 Nexus,然后在 maven-public 里面包含新增的 jcenter 仓库。

配置JVM参数

切换到目录/usr/local/nexus3/bin,有个nexus.vmoptions文件,和JVM启动参数、或者IDEA的JVM参考配置文件很类似。

删除

本地开发时一般会使用SNAPSHOT快照版本号。不管是在本地执行mvn deploy,将本地已经提交或未提交的代码编译打包并部署上传到nexus私服,还是Jenkins等构建工具基于GitLab(或GitHub)将已提交的代码打包上传到nexus私服,都会覆盖之前的SNAPSHOT版本。

那就不可避免会出现最后一个SNAPSHOT版本号有误,解决方法:

  1. 以正确的代码为准,执行mvn deploy再次覆盖错误的版本;
  2. 删除最后一次错误的版本

说到删除构建产物artifact,以nexus管理员账户登录,点击Browse,找到想要删除的artifact,点击删除即可。

要注意的是,不能从maven-public 这种public Type进入
在这里插入图片描述
而应该从hosted Type托管类型进入
在这里插入图片描述

问题

Could not transfer artifact 401 Unauthorized

需在settings.xml里配置server标签,其中用户名密码是安装过程中设置的:

<servers>
	<server>
		<id>snapshots</id>
		<username>admin</username>
		<password>admin</password>
	</server>
	<server>
		<id>releases</id>
		<username>admin</username>
		<password>admin</password>
	</server>
</servers>

mvn ERROR xxx for default is missing

mvn clean执行报错:

[ERROR] Error executing Maven.
[ERROR] 2 problems were encountered while building the effective settings
[ERROR] 'mirrors.mirror.url' for default is missing @ C:\Users\johnn\.m2\settings.xml
[ERROR] 'mirrors.mirror.mirrorOf' for default is missing @ C:\Users\johnn\.m2\settings.xml

原因是存在空的标签,删除即可:

<mirror>
</mirror>

上传到Nexus3私服

使用mvn deploy命名把本地的jar上传到nexus私服。

若报错:
Failed to deploy artifacts: Could not transfer artifact XXX from/to releases (http://xxxx:8081/repository/maven-releases/) 400 Bad Request

错误分析:
mvn deploy在nexus3私服中已存在的jar包时出现400错误,原因是 release 默认库是不允许重复部署的,即默认是disable redeploy

解决方法:
登录到私服,找到报错的这个仓库,如maven-releases,并修改部署策略(Deployment policy)为Allow redeploy
在这里插入图片描述

Failed to deploy artifacts: Could not transfer artifact from/to releases Transfer failed for 400 Repository does not allow updating assets: maven-releases -> [Help 1]

mvn deploy问题

was cached in the local repository, resolution will not be reattempted until the update interval of nexus has elapsed or updates are forced and points at wrong local POM
在这里插入图片描述
解决方案:
修改settings.xml文件,将其中的仓库添加<updatePolicy>always</updatePolicy>来强制每次都更新依赖库。

删除无用repository
在这里插入图片描述

参考

nexus私服配置

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

johnny233

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值