一、安装nexus3

1.1 安装

#下载镜像

docker pull sonatype/nexus3

#创建本地目录

mkdir -p /data/nexus3

#授权目录

chmod 777 -R/data/nexus3

#安装

docker run -dti \
--net=host \
--name=nexus3 \
--privileged=true \
--restart=always \
--ulimit nofile=655350 \
--ulimit memlock=-1 \
--memory=8G \
--memory-swap=-1 \
--cpuset-cpus='1-7' \
-e INSTALL4J_ADD_VM_PARAMS="-Xms4g -Xmx4g -XX:MaxDirectMemorySize=8g" \
-v /etc/localtime:/etc/localtime \
-v /data/nexus3:/nexus-data \
sonatype/nexus3

1.2 验证

看到 Started Sonatype Nexus OSS 表示启动好了。

#查看日志 

docker logs -f nexus3

这个时候 需要查看管理员密码 这个是一个随机生成的文件

不要修改这个文件

可以在 cat /data/nexus3/admin.password 查看

登录 http://ip:8081 admin 密码就是刚才看到的。

修改当前admin的密码,修改后 admin.password 这个文件就消失了。

二、配置nexus

登录nexus管理平台后(注意必须admin登录才行,不然只能浏览模式),可以看到如下界面:

Docker 安装 nexus_nexus

2.1、创建Blob stores

在创建repository之前,还需要先指定文件存储目录,便于统一管理。就需要创建Blob stores

Docker 安装 nexus_maven_02

创建好后可以看到blob stores有多个,一个是系统默认的,剩下的是自己创建的。如果不想自己创建,使用系统默认的文件存储目录(在sonatype-work/nexus3/blobs)也是可以的。到时候创建repository时,存储目录选择default就可以了。

Docker 安装 nexus_maven_03

2.2、创建nexus仓库

仓库类型说明

项目

具体说明

hosted

本地存储。像官方仓库一样提供本地私库功能

proxy

提供代理其它仓库的类型

group

组类型,能够组合多个仓库为一个地址提供服务

创建proxy repository代理仓库

Docker 安装 nexus_maven_04

选择maven2(proxy),代理仓库

Docker 安装 nexus_maven_05

设置代理仓库

Docker 安装 nexus_nexus_06

Docker 安装 nexus_nexus_07

其他的可以采用默认,以后根据需要可以再修改。

创建hosted repository仓库

Docker 安装 nexus_nexus_08

Docker 安装 nexus_maven_09

上图的Hosted设置选项,选项中有三个值:

Allow redeploy​:允许同一个版本号下重复提交代码, nexus以时间区分

Disable redeploy​:不允许同一个版本号下重复提交代码

Read-Only​:不允许提交任何版本

原生的maven-releases库是Disable redeploy设置, maven-snapshots是Allow redeploy。

创建group repository组仓库

Docker 安装 nexus_maven_10

Docker 安装 nexus_nexus_11

将hosted repositories宿主仓库的顺序放在proxy repositories代理仓库之前,因为一个group仓库组中可以包括宿主仓库和代理仓库。而整个group repository是作为一个public repository给用户使用的。

所以当查找jar包的时候,如果代理资源库在前面,那就是先从远程去查找jar包,而不是先从宿主仓库(本地仓库)去查找jar包。

三、设置maven

Maven下的setting.xml文件和项目中的pom.xml文件的关系是:settting.xml文件是全局设置,而pom.xml文件是局部设置。pom.xml文件对于项目来说,是优先使用的。而pom.xml文件中如果没有配置镜像地址的话,就按照settting.xml中定义的地址去查找。

1、修改maven配置文件setting.xml

获取仓库地址

Docker 安装 nexus_maven_12

修改setting.xml文件如下:

<servers>    
<server>
<id>foxchan_group</id>
<username>admin</username>
<password>xxxxxxxxxxxxxxxxxxxx</password>
</server>
</servers>
<mirrors>
<mirror>
<id>foxchan_group</id>
<mirrorOf>central</mirrorOf>
<name>foxchan_group</name>
<url>http://xxxxxxxxxx/repository/foxchan_group/</url>
</mirror>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>

修改后可以重新编译项目,必须添加参数-U,(-U,--update-snapshots,强制更新releases、snapshots类型的插件或依赖库,否则maven一天只会更新一次snapshot依赖)。代理仓库会从远程中央仓库下载jar包

2、通过管理平台上传三方jar包

有些jar是第三方提供的,在中央仓库中是没有的,我们可以上传这些本地三方jar包到hosted repository宿主仓库中。

Docker 安装 nexus_maven_13Docker 安装 nexus_maven_14


3、deploy部署jar包到私服

1、release和snapshots jar包区别

SNAPSHOT版本代表不稳定(快照版本),还在处于开发阶段,随时都会有变化。当上传同样的版本号jar包的时候,SNAPSHOT会在版本号的后面自动追加一串新的数字,即日志标签,nexus会根据日志标签区分出不同的版本,在maven引用时,如果使用的是snapshot版本,重新导入maven的时候,会去私库拉取最新上传的代码。

RELEASE则代表稳定的版本(发布版本),一般上线后都会改用RELEASE版本。也就是说1.0,2.0这样的版本只能有一个,也就是说当前版本号下,不可能出现不同的jar。

2、创建snapshot仓库

可以在nexus上添加一个snapshot仓库,专门用于存放snapshot版本的jar包。snapshot仓库也是hosted类型的,创建方式和hosted repository类型。创建好后,加入到组仓库里面就可以了。

3、项目pom.xml文件配置

可以在项目的pom文件中设置具体的relaeses库和snapshots库。如果当前项目的版本号的后缀名中带着-SNAPSHOT,类似<version>***-SNAPSHOT</version>,就会将项目jar包提交到snapshots库中,没有带-SNAPSHOT的话会提交releases库中。

在pom.xml文件中配置 distributionManagement 节点如下,在项目中执行deploy命令后,jar包将会被上传到nexus中。

<distributionManagement>
<repository>
<id>nexus-releases</id>
<!--release版本仓库-->
<name>Nexus Release Repository</name>
<url>http://ip:8081/repository/foxchan_hosted/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<!--snapshot版本仓库-->
<name>Nexus Snapshot Repository</name>
<url>http://ip:8081/repository/foxchan_snapshots/</url></snapshotRepository></distributionManagement>

默认地,maven编译打包不会下载SNAPSHOT版本的jar包,所以还需要在pom.xml文件中配置支持下载snapshot版本jar包。

<repositories>
<repository>
<id>foxchan_group</id>
<url>http://xxxxxxxx/repository/foxchan_group/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>

至此,nexus搭建完毕,支持本地部署依赖jar包

4.1 访问nexus报错

org.apache.http.conn.HttpHostConnectException: Connect to sonatype-download.global.ssl.fastly.net:44

解决方法:

Docker 安装 nexus_nexus_15


然后重启即可