目录
[dokcer 安装nexus](#dokcer 安装nexus)
[maven-releases maven-snapshots](#maven-releases maven-snapshots)
使用nexus来搭建私服
引入
我们现在使用maven来拉取依赖时,都是直接通过阿里云的中央仓库镜像拉取的,如果多人同时从这个中央仓库拉取,显然速度是很慢的,而且中央仓库的代码都是开源的

使用私服的好处:
访问数据块,可以让自己的代码保密,不对外暴露
拉取依赖的过程
安装nexus私服后
我们的maven项目会先从本地仓库进行拉取依赖,如果本地仓库没有,就去私服拉取仓库的依赖,如果还没有,就通过私服去中央仓库拉取依赖并同步到私服自已与中央仓库代理的仓库
dokcer 安装nexus
拉取镜像
docker pull sonatype/nexus3
创建一个数据卷
docker volume create nexus-data
启动容器
docker run -d --name nexus3 -p 8081:8081 -v nexus-data:/nexus-data sonatype/nexus3
docker run
创建并启动一个新的 Docker 容器。
-d
在后台运行容器(守护模式)。
--name nexus3
为容器指定名称
nexus3
,便于后续管理。
-p 8081:8081
将宿主机的 8081 端口映射到容器内的 8081 端口。通过宿主机的 IP 地址访问 Nexus 3 的 Web 界面。
-v nexus-data:/nexus-data
将命名卷
nexus-data
挂载到容器内的/nexus-data
目录,用于持久化存储 Nexus 3 的数据(如仓库、配置文件等)。Docker 会自动创建这个命名卷。
sonatype/nexus3
使用 Sonatype Nexus 3 的官方镜像。
登录

密码在我们挂载的数据卷里面


登进去之后要修改密码

nexus的仓库介绍
maven-central
仓库默认代理的是maven的中央仓库,这里会管理从中央仓库下载下来的依赖
maven-public
这是一个仓库组,我们想要去拉取私服的依赖时,直接配置仓库组的地址即可,仓库组会遍历里面的仓库来给我们一个对应的依赖
注意:这里找依赖是从仓库组的成员从上到小寻找的,依赖都找不到时,就会去maven-central找,这个代理仓库又会去中央仓库找,但是中央仓库在国外,访问速度慢,所以我们再配置一个代理仓库来代理阿里的镜像仓库



创建成功后,往仓库组添加成员,并把它放在maven-central的上面,这样一来就先通过阿里云的镜像来取依赖了。
maven-releases maven-snapshots
这两个仓库一个是存releases版本的项目,一个是snapshots版本的项目

maven-releases
是用于存储正式版本的仓库。正式版本是指经过测试、稳定且不会频繁更新的版本。这些版本通常以固定的版本号发布,例如1.0.0
、2.3.4
等。在 Maven 的配置中,releases
仓库通常用于依赖那些已经发布且不会频繁变更的组件。
maven-snapshots
是用于存储快照版本的仓库。快照版本是指正在开发中的版本,它们可能会频繁更新,并且版本号通常以-SNAPSHOT
结尾,例如1.0.0-SNAPSHOT
。快照版本主要用于开发阶段,允许开发者使用最新的功能,但可能会引入不稳定性。
注意:这里要选择Allow redeploy不然不能发布新的版本上去

但是如果我们有多个项目,都把项目放到这两个仓库里面,不好维护和查看
所以我们再创建一个新的项目时,为这个项目额外创建两个仓库
创建一个releases仓库,选择releases模式和allow redeploy



注意:把这两个仓库加到仓库组中

项目的部署
在先使用nexus私服拉取依赖时,我们先来了解一下maven项目的部署
这是maven的声明周期
我们可以简单介绍一下
clean -->清理target目录
complie-->编译src里main目录下的原代码
test-->会对src里test目录下所有使用了@Test注解的方法进行测试,如果全部通过才是测试通过
package-->打包,maven默认是jar包,进行版本管理的父工程要设置成pom,web工程是war包(有web目录)
install->把当前项目下载到本地仓库
deploy-->把项目部署到私服

演示
这里有一个项目,里有一个方法

这个项目依赖上面的项目,可以发现,现在无法导入,因为本地仓库里没有test-source依赖
现在把test-source项目安装到本地仓库中
打包成功,有jar包(package),target目录(compile编译出来)
仓库中也有依赖
test-de导入依赖成功

可以成功使用

使用nexus私服部署
现在两个项目都是我们自己开发的,所以可以直接安装到本地仓库的,但是我们再开发的时候,肯定是分开开发的,那我们怎么导入别人写的依赖呢,难不成使用u盘去拷贝吗?哈哈,这显然是不对的,所以这就是nexus私服的用处
打开setting.xml文件在 <servers>里配置:
html
<servers>
<!-- 这是配置访问私有仓库的用户名密码 -->
<server>
<!-- id标签可以随便填,只需要在servers中唯一即可,后面很多地方会使用该id -->
<id>self-test</id>
<username>admin</username>
<password>admin</password>
</server>
</servers>
maven配置完之后,去test-sources项目中编写把这个项目要部署到哪
这里配置了两个仓库的地址,一个是releases版本,一个是snapshots版本,maven会根据我们项目的版本类型来决定部署到哪一个仓库中,当前项目是snapshot版本
html
<distributionManagement>
<repository>
<!--注意这个id一定要填写我们maven的setting.xml当中配置的id-->
<id>self-test</id>
<url>http://192.168.230.100:8081/repository/test-releases/</url>
</repository>
<snapshotRepository>
<!--注意这个id一定要填写我们maven的setting.xml当中配置的id-->
<id>self-test</id>
<url>http://192.168.230.100:8081/repository/test-snapshots/</url>
</snapshotRepository>
</distributionManagement>
distributionManagement:负责将指定的构件部署到 Nexus 指定的仓库中。
repository:代表上传release版本存储的仓库地址
snapshotRepository:代表上传snapshot版本存储的仓库地址
标签中的 id,就是上面我们配置的server id,maven会通过这个id去server中拿用户名密码去访问私服仓库。
标签中的url,就是对应仓库的地址:仓库的url复制即可,注意对应仓库,弄反了是传不上去的,,因为类型不一样,快照和稳定版

点击deploy部署
可以看到私服仓库里已经存在

使用私服拉取依赖
我们现在已经把依赖导入私服了,我们还得把依赖从私服导入到本地
继续在maven的settings.xml中编辑
注意:这里设置的是maven-public仓库组的地址,因为仓库组的成员已经包括了我们之前的仓库,这样子就不用多次配置了
html
<profiles>
<profile>
<id>nexus</id>
<!--声明一个或多个远程仓库 -->
<repositories>
<!-- 声明一个 Nexus 私服上的仓库 -->
<repository>
<!--仓库id,这个id就是上面配置的账号密码id -->
<id>self-test</id>
<!-- 仓库的名称 -->
<name>nexus</name>
<!--仓库的地址 -->
<url>http://192.168.230.100:8081/repository/maven-public/</url>
<!-- 是否开启该仓库的 release 版本下载支持 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否开启该仓库的 snapshot 版本下载支持 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<!-- 声明一个或多个远程插件仓库 -->
<pluginRepositories>
<!--声明一个 Nexus 私服上的插件仓库 -->
<pluginRepository>
<!--插件仓库 id -->
<id>self-test</id>
<!--插件仓库 名称 -->
<name>nexus</name>
<!-- 配置的插件仓库的地址 -->
<url>http://192.168.230.100:8081/repository/maven-public/</url>
<!-- 是否开启该插件仓库的 release 版本下载支持 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否开启该插件仓库的 snapshot 版本下载支持 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.compilerVersion>11</maven.compiler.compilerVersion>
</properties>
<!-- 默认该profile生效 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
还有镜像也得配
- id:之前server的id,访问仓库组也要拿用户名密码
- mirrorOf:
*
代表所有的依赖都从私服找- url:就是仓库组的,还是去仓库组右边copy即可
这里除了私服的仓库组地址,还额外配了一个阿里云镜像的地址,防止就是nexus宕机后,无法拉取镜像的事故,配置了之后,中央仓库的地址还是能正常拉取的
html
<mirrors>
<!-- 阿里云仓库 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
<mirror>
<id>self-test</id>
<name>nexus name</name>
<mirrorOf>*</mirrorOf>
<url>http://192.168.230.100:8081/repository/maven-public/</url>
</mirror>
</mirrors>
我们先把之前本地仓库存在的依赖删除
再重新拉取,成功
修改版本后再次重新部署


可以选择版本拉取依赖
