nexus的使用

目录

使用nexus来搭建私服

引入

[dokcer 安装nexus](#dokcer 安装nexus)

nexus的仓库介绍

maven-central

​编辑

maven-public

[maven-releases maven-snapshots](#maven-releases maven-snapshots)

项目的部署

演示

使用nexus私服部署

使用私服拉取依赖


使用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
  1. docker run

    创建并启动一个新的 Docker 容器。

  2. -d

    在后台运行容器(守护模式)。

  3. --name nexus3

    为容器指定名称 nexus3,便于后续管理。

  4. -p 8081:8081

    将宿主机的 8081 端口映射到容器内的 8081 端口。通过宿主机的 IP 地址访问 Nexus 3 的 Web 界面。

  5. -v nexus-data:/nexus-data

    将命名卷 nexus-data 挂载到容器内的 /nexus-data 目录,用于持久化存储 Nexus 3 的数据(如仓库、配置文件等)。Docker 会自动创建这个命名卷。

  6. 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.02.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>

我们先把之前本地仓库存在的依赖删除

再重新拉取,成功

修改版本后再次重新部署

可以选择版本拉取依赖

相关推荐
dapeng-大鹏5 分钟前
什么是云原生?
后端·云原生
一匹电信狗9 分钟前
浅谈Linux中的Shell及其原理
linux·服务器·c语言·开发语言·c++·ssh·unix
TDengine (老段)23 分钟前
TDengine 使用最佳实践
java·大数据·数据库·物联网·时序数据库·iot·tdengine
今年不养猪只除草25 分钟前
DBeaver安装教程+连接TDengine数据库
大数据·数据库·tdengine
碣石潇湘无限路25 分钟前
【云原生】动态资源分配(DRA)深度洞察报告
云原生
Damon小智1 小时前
玩转云服务器——阿里云操作系统控制台体验测评
服务器·数据库·阿里云
齐 飞1 小时前
MySQL中 IN 到底走不走索引?
数据库·mysql
曹天骄2 小时前
NAT 和 IP 直接通信的区别
服务器·网络协议·tcp/ip
迷茫、Peanut2 小时前
嵌入式学习L6网络编程D3TCP
服务器·网络·嵌入式硬件·学习·tcp/ip
pp-周子晗(努力赶上课程进度版)2 小时前
Linux 进程的创建、终止、等待与程序替换函数 保姆级讲解
linux·运维·服务器