【Maven】03 - 私服搭建

发布于:2025-08-14 ⋅ 阅读:(13) ⋅ 点赞:(0)

【Maven】03 - 私服搭建

就是入门篇中提到的远程仓库~

假设你身在基建团队,主要负责研发各个业务开发组的公用组件,那么当你写完一个组件后,为了能让别的业务开发组用上,难道是先把代码打包,接着用U盘拷出来,给别人送过去嘛?有人说不至于,难道我不会直接发过去啊……

的确,用通讯软件发过去也行,但问题依旧在,假设你的组件升级了,又发一遍吗?所以,为了便于团队协作,搭建一个远程仓库很有必要,写完公用代码后,直接发布到远程仓库,别人需要用到时,直接从远程仓库拉取即可,而你升级组件后,只需要再发布一个新版本即可!

一:私服搭建指南

1️⃣ 下载Nexus

可以先去到Nexus官网下载一下安装包(可能需要一些科技),Nexus同样是一款解压即用的工具

⚠️ 解压的目录中不能存在中文,否则后面启动不起来!

  • nexus-x.x.x-xx:里面会放Nexus启动时所需要的依赖、环境配置;
  • sonatype-work:存放Nexus运行时的工作数据,如存储上传的jar包等。

在这里插入图片描述

2️⃣ 配置和启动Nexus

进入到解压目录/etc/nexus-default.properties中修改启动的端口号,默认是8081,如果没有被服务占用可以不用修改

接着可以去到解压目录的bin文件夹中,然后进入到bin目录下,运行命令nexus.exe /run nexus准备启动,初次启动的过程会额外的慢,因为它需要初始化环境,创建工作空间、内嵌数据库等。当看到:Started Sonatype Nexus...说明启动成功。Nexus初次启动后,会在sonatype-work目录中生成一个/nexus3/admin.password文件,存放着初始密码,默认账号就是admin

然后在浏览器输入网址http://localhost:8081, 登录用户名和密码。登录后就会让你修改密码,改完后就代表Nexus搭建成功

⚠️ 改完密码记得重新登录一次,否则后面的操作会没有权限

二:私服仓库介绍

登录成功后,点击Browse会看到一些默认仓库,这里稍微解释一下每个字段的含义

在这里插入图片描述

重点来说说仓库的分类(type字段),总共有四种类型:

类型 释义 作用
hosted 宿主仓库 保存中央仓库中没有的资源,如自研组件
proxy 代理仓库 配置中央仓库,即镜像源,私服中没有时会去这个地址拉取
group 仓库组 用来对宿主、代理仓库分组,将多个仓库组合成一个对外服务
virtual 虚拟仓库 并非真实存在的仓库,类似于MySQL中的视图

在这里插入图片描述

所以,本地的Maven需要配置私服地址,当项目需要的依赖,在本地仓库没有时,就会去到相应的宿主/远程仓库拉取;如果宿主仓库也没有,就会根据配置的代理仓库地址,去到中央仓库拉取,最后依次返回……。

三:Maven配置私服

Maven想要使用私服,需要先修改settings.xml文件,建议别直接改,先拷贝一份出来

1️⃣ 修改settings.xml里的镜像源配置,之前配的阿里云镜像不能用了

<mirror>
    <id>nexus-test</id>
    <mirrorOf>*</mirrorOf>
    <url>http://localhost:8081/repository/maven-public/</url>
</mirror>

2️⃣ 在私服中修改访问权限,允许匿名用户访问,如下:

在这里插入图片描述

3️⃣ 在Nexus私服中配置一下代理仓库地址,即配置镜像源http://maven.aliyun.com/nexus/content/groups/public/

在这里插入图片描述

4️⃣ 在Mavensettings.xml中,配置私服的账号密码:

<server>
  <id>test-release</id>
  <username>admin</username>
  <password>你的私服账号密码</password>
</server>

<server>
  <id>test-snapshot</id>
  <username>admin</username>
  <password>你的私服账号密码</password>
</server>

四:项目和私服的连接

1️⃣ 为项目创建对应的私服仓库,如果已有仓库,可以直接复用,创建步骤如下:

在这里插入图片描述

其中唯一值得一提的就是仓库格式,这里有三个可选项:

  • Release:稳定版,表示存放可以稳定使用的版本仓库;
  • Snapshot:快照版,代表存储开发阶段的版本仓库;
  • Mixed:混合版,不区分格式,表示混合存储代码的仓库。

为了规范性,我的建议是Release、Snapshot格式的仓库,各自都创建一个。

2️⃣ 在Maven工程的pom.xml文件中,配置对应的私服仓库地址,如下:

<!-- 配置当前工程,在私服中保存的具体位置 -->
<distributionManagement>
    <repository>
        <!-- 这里对应之前 settings.xml 里配置的server-id -->
        <id>test-release</id>
        <!-- 这里代表私服仓库的地址,只需要把后面的名字换掉即可 -->
        <url>http://localhost:8081/repository/test-release/</url>
    </repository>
    <snapshotRepository>
        <id>test-snapshot</id>
        <url>http://localhost:8081/repository/test-snapshot/</url>
    </snapshotRepository>
</distributionManagement>

3️⃣ 将当前项目发布到私服仓库,这里可以执行mvn clean deploy命令,也可以通过IDEA工具完成

在这里插入图片描述

由于配置了私服上的两个宿主仓库,一个为稳定仓库,另一个为快照仓库,所以发布时,默认会根据当前项目的<version>版本结尾,来选择上传到相应的仓库,例如上图中的结尾是SNAPSHOT,所以会被发布到快照仓库,如果结尾不是这个后缀时,就会被发布到Release仓库。

当发布完成后,大家就可以登录Nexus界面,找到对应的宿主仓库,查看相应的jar包信息啦!不过还有一点要注意:你要发布的包不能带有上级,即不能有parent依赖,否则在其他人在拉取该项目时,会找不到其父项目而构建失败。要解决这个问题,可以先将parent项目打包并上传至远程仓库,然后再发布依赖于该parent项目的子模块。

五:仓库组

1:创建仓库组

如果你目前所处的公司,是一个大型企业,不同团队都有着各自的宿主仓库,而你恰恰又需要用到其他团队的组件,这个时候就要用到仓库组

1️⃣ 创建仓库的时候选择group, 然后给仓库组取一个名字

2️⃣ 选择私服上的现有仓库列表加入到当前的仓库组中,可以通通过左右箭头添加和移除,通过上下箭头调整优先级

3️⃣ 选择好之后,点击创建按钮

在这里插入图片描述

2:单个工程和仓库组的映射

只需要修改pom.xml的文件

<!-- 第一个是普通依赖的仓库组地址 -->
<!-- 针对于pom.xml中的<dependency>标签生效 -->
<repositories>
    <repository>
        <id>zhuzi-group</id>
        <!-- 配置仓库组的地址 -->
        <url>http://localhost:8081/repository/zhuzi-group/</url>
        <!-- 允许从中拉取稳定版的依赖 -->
        <releases>
            <enabled>true</enabled>
        </releases>
        <!-- 也允许从中拉取快照版的依赖 -->
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

<!-- 第二个是插件依赖的仓库组地址 -->
<!-- 针对<plugin>标签生效 -->
<pluginRepositories>
    <pluginRepository>
        <id>plugin-group</id>
        <url>http://localhost:8081/repository/zhuzi-group/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

3:本地Maven与仓库组的映射

如果你所有的Maven工程,都需要与Nexus私服上的仓库组绑定,这时就可以直接修改settings.xml文件

<!-- 这组配置要写在<profiles>标签里面 -->
<profile>
	<id>zhuzi-group</id>
	<repositories>
		<repository>
			<id>nexus-maven</id>
			<url>http://localhost:8081/repository/zhuzi-group/</url>
			<releases>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
			</releases>
			<snapshots>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
			</snapshots>
		</repository>
	</repositories>
 
	<pluginRepositories>
		<pluginRepository>
			<id>nexus-maven</id>
			<url>http://localhost:8081/repository/zhuzi-group/</url>
			<releases>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
			</releases>
			<snapshots>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>
</profile>

和单个工程的配置差不多,多了一个<updatePolicy>,即更新策略,可选项如下:

  • always:每次需要Maven依赖时,都先尝试从远程仓库下载最新的依赖项;
  • daily:每天首次使用某个依赖时,从远程仓库中下载一次依赖项;
  • interval:X:每隔X个小时,下载一次远程仓库的依赖,X只能是整数;
  • never:仅使用本地仓库中已经存在的依赖项,不尝试从远程仓库中拉取。

Maven工程使用依赖时,首先会从本地仓库中查找所需的依赖项

如果本地仓库没有,则从配置的远程仓库下载这时会根据<updatePolicy>策略来决定是否需要从远程仓库下载依赖

当然,还需要激活一下上述配置才能生效

<activeProfiles>
    <!-- 这里写前面配置的ID -->
	<activeProfile>zhuzi-group</activeProfile>
</activeProfiles>

⚠️ 这是从私服拉取依赖的配置,如果想要发布自己的内容到私服,还是需要配置<distributionManagement>

<!-- 配置当前工程,在私服中保存的具体位置 -->
<distributionManagement>
    <repository>
        <!-- 这里对应之前 settings.xml 里配置的server-id -->
        <id>test-group</id>
        <!-- 这里代表私服仓库的地址,只需要把后面的名字换掉即可 -->
        <url>http://localhost:8081/repository/test-group/</url>
    </repository>
</distributionManagement>

网站公告

今日签到

点亮在社区的每一天
去签到