Nexus是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库下载所需要的构件(artifact),但这通常不是一个好的做法。应该在本地架设一个Maven仓库服务器,还提供了强大的仓库管理功能,构件搜索功能,占用较少的内存,基于简单文件系统,而非数据库。这些优点使其日趋成为最流行的Maven仓库管理器。

Nexus可以代理远程仓库的同时维护本地仓库,以节省带宽和时间,

Nexus不是Maven的核心概念,它仅仅是一种衍生出来的特殊的Maven仓库。也可以理解为jar的缓存服务器

对于Maven来说,仓库只有两种:本地和远程

本地仓库就是我们在Maven的settings.xml中配置的本地仓库地址。由于最原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令的时候下载到需要的构件。

中央仓库是Maven默认的远程仓库。

私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当Maven需要下载构件时,直接请求私服,私服上存在则下载到本地仓库,否则,私服请求外部的远程仓库,将构件下载到私服,在提供给本地仓库下载。

适用于Maven场景较多的情况下,如果只有一个Maven的话,不适用架设Nexus私服,一个就直接使用 aliyun 仓库就挺好了

Nexus功能介绍

1、节省外网带宽。大量对于外部仓库的重复请求会消耗带宽,利用私服代理外部仓库,可以消除对外的重复构件下载,降低带宽的压力。

2、加速Maven构建。不停地连接请求外部仓库十分的耗时,Maven在执行构建的时候不停地检查远程仓库的数据。利用私服,Maven只检查局域网的数据,提高构建的速度。

3、部署第三方构件。当某个构件无法从任何一个外部远程仓库获得。建立私服之后,便可以将这些构件部署到私服,供内部的Maven项目使用。

4、提高稳定性,增强控制。Maven构建高度依赖于远程仓库,因此,当网络不稳定的时候,Maven构建也会变得不稳定,甚至无法构建。私服缓存了大量构件,即使暂时没有网络,Maven也可以正常的运行。

5、降低中央仓库的负荷。使用私服可以避免很多对中央仓库的重复下载,降低中央仓库的压力。

Nexus安装

因为是为Maven来服务,使用Maven服务器也是必不可少的,准备好最后验证使用

需要Java环境(192.168.1.1)

[root@localhost ~]# tar zxf jdk-8u201-linux-x64.tar.gz
[root@localhost ~]# mv jdk1.8.0_201/ /usr/local/java
[root@localhost ~]# echo 'export JAVA_HOME=/usr/local/java
> export JRE_HOME=/usr/local/java/jre/
> export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
> export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin' >> /etc/profile
[root@localhost ~]# rm -rf /usr/bin/java
[root@localhost ~]# source /etc/profile
[root@localhost ~]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

安装Nexus

[root@localhost ~]# mkdir /usr/local/nexus
[root@localhost ~]# tar zxf nexus-3.14.0-04-unix.tar.gz -C /usr/local/nexus/

启动服务,运行服务建议3G内存,启动较慢,耐心等待

[root@localhost ~]# /usr/local/nexus/nexus-3.14.0-04/bin/nexus start
[root@localhost ~]# netstat -anpt | grep 8081

Nexus目录

[root@localhost ~]# ls /usr/local/nexus/
nexus-3.14.0-04  sonatype-work
nexus-3.14.0-04:应用目录  存放应用数据,对服务的配置等
sonatype-work:工作目录  存放一些仓库数据

Nexus使用

准备私服的仓库

访问页面192.168.1.1:8081

Nexus_ac

管理用户登录,管理账户admin,默认密码admin123

Nexus_log

查看仓库内容

仓库类型说明

仓库类型 说明
group(仓库组类型) 又叫仓库组,用于方便开发人员自己设定的仓库
hosted(宿主类型) 内部项目的发布仓库(内部开发人员发布上去存放的仓库)
proxy(代理类型) 从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值,即被代理的远程仓库的路径)
virtual(虚拟类型) 虚拟仓库(这个基本上用不到)

cang_data

仓库管理

man_cang

创建一个角色供管理仓库的用户使用,角色类似于用户组,用来编辑权限

create_role

view_role

创建普通用户,让普通用户的权限就是刚才创建的角色权限

create_user

view_user

添加代理仓库

proxy_story

create_proxy

地址为aliyun的仓库地址,最下方创建即可

aliyun_story

为新添加的aliyun仓库设置查找列表,后期使用jar包时就是依次使用各个仓库下载

found_list

group

使用私服下载

打开另一台服务器:Maven服务器192.168.1.4,整合私服

vim /usr/local/maven/conf/settings.xml 
# 添加私服仓库地址,将之前的aliyun仓库使用<!---->注释掉
# 添加:
    <mirror>
        <id>nexus conf</id>
        <name>nexusconf</name>
        # 这里的地址为Nexus的地址及端口号
        <url>http://192.168.1.1:8081/repository/maven-public/</url>
        <mirrorOf>*</mirrorOf>   # 拦截所有jar包下载到私服
    </mirror>

清空之前的本地仓库

[root@localhost ~]# rm -rf /root/.m2/repository/*

验证私服,随便创建一个项目,或者使用已有项目,执行随便一条mvn命令即可

cd 项目目录
mvn clean install  # 可以看到下载地址都是Nexus服务器地址1.1

清除Nexus缓存

cache

clean_cache

私服的上传

内部项目

参考Maven的文章创建一个Web项目(192.168.1.4)

编辑pom文件,使得使用mvn deploy上传可以上传到指定的Nexus中

[root@192 kgcweb]# vim pom.xml 
# 倒数第二行添加,意思为添加本项目的上传仓库
  <distributionManagement>
    <snapshotRepository>
      <id>nexus</id>
      # 快照存储库,按照Maven的目录结构,这个库用于存放开发时的不稳定版
      <name>Snapshot Repository</name>
      <url>http://192.168.1.1:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
    <repository>
      <id>nexus</id>
      # 发布存储库,这个库用于稳定后的版本
      <name>Releases Repository</name>
      <url>http://192.168.1.1:8081/repository/maven-releases/</url>
    </repository>
  </distributionManagement>

编辑Maven配置文件,加入允许Nexus上传的认证验证信息

vim /usr/local/maven/conf/settings.xml 
# 在  </servers>这一行之上,添加server标签
    <server>
      <id>nexus</id>   # 这里的id要和pom上面的一样
      <username>kgcdev</username>      # 这里的用户名密码是在Nexus的仓库中可以登录的用户相对应
      <password>admin123</password>
    </server>

验证上传

在Maven服务器192.168.1.4,进入项目根目录执行mvn clean deploy

如果出现报错400/权限拒绝/401等检查用户权限,可以更改为admin用户,或者是因为重复上传报错

默认会上传到snapshots快照仓库中,这是属于开发是存放的仓库,说明还不够稳定,如果要上传到稳定后的存储库,将pom文件中的版本由<version>1.0-SNAPSHOTS</version>改为<version>1.0</version>即可,再次上传就倒了releases仓库中

部署策略:允许重复部署(重复发版)

只需要登录到Nexus的管理界面,对仓库的的策略改为允许重复部署,再次重复上传即可

allow_redeploy

第三方项目上传

创建一个第三方上传之后的仓库

add_repos

ch_maven

add_repos_maven

maven_public

Available

Maven

vim /usr/local/maven/conf/settings.xml 
# 在  </servers>这一行之上,添加server标签
    <server>
      <id>third</id>   # 与库名对应
      <username>kgcdev</username>
      <password>admin123</password>
    </server>

这里有一个aliyun线程的第三方jar包,用来上传aliyun-sdk-oss-2.6.1.jar

mvn deploy:deploy-file \
  -DgroupId=com.aliyun.oss \
  -DartifactId=aliyun-sdk-oss \
  -Dversion=2.6.1 -Dpackaging=jar \
  -Dfile=/root/aliyun-sdk-oss-2.6.1.jar \
  -DrepositoryId=third \
  -Durl=http://192.168.1.1:8081/repository/third

如果出现权限拒绝/400/401等问题修改使用的用户,因为有的用户可能权限不够,或者上传项目重复原因

Nexus常见问题

1、仓库数据备份和迁移

只需要将Nexus目录直接移走即可

2、如果admin管理员用户忘记密码

通过进入orientdb数据库,是一种开发使用的数据库

java -jar /usr/local/nexus/nexus-3.14.0-04/lib/support/nexus-orient-console.jar 
orientdb> 
orientdb> connect plocal:/usr/local/nexus/sonatype-work/nexus3/db/security admin admin
进
orientdb> update user SET password="$shiro1$SHA-512$1024$NE+wqQq/TmjZMvfI7ENh/g==$V4yPw8T64UQ6GfJfxYq2hLsVrBY8D1v+bktfOxGdt4b/9BthpWPNUy/CBk6V9iA0nHpzYzJFWO8v/tZFtES8CA==" UPSERT WHERE id="amdin"
# 更新user表中admin的密码,password的引号里面需要些密码的加密状态
# $shiro1$SHA-512$1024$NE+wqQq/TmjZMvfI7ENh/g==$V4yPw8T64UQ6GfJfxYq2hLsVrBY8D1v+bktfOxGdt4b/9BthpWPNUy/CBk6V9iA0nHpzYzJFWO8v/tZFtES8CA==
# 上一条为admin123的加密状态,写入引号即可

3、上传项目重复报错400或者401

1)使用的Nexus用户权限不足导致,此方法还适用于报错Access denied

2)上传项目重复,仓库上传权限不足

在上面过程都有解决方法

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0